by_library/com_utility/creation_functions/creation_functions.cpp
C++ example program demonstrating use of the
COMSTL co_create_instance functions to create instances of the
Pantheios.COM.LoggerManager coclass.
#include <comstl/conversion/interface_cast.hpp>
#include <comstl/error/errorinfo_desc.hpp>
#include <comstl/util/creation_functions.hpp>
#include <comstl/util/initialisers.hpp>
#include <stlsoft/smartptr/ref_ptr.hpp>
#include <platformstl/error/error_desc.hpp>
#include "pantheios.COM.h"
#include <exception>
#include <iostream>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
#include <stdlib.h>
static void CreateLoggersAndLog(ILoggerManager *plogmgr, char const *message);
static int main_()
{
{
ILoggerManager *plogmgr;
if(SUCCEEDED(comstl::co_create_instance(CLSID_LoggerManager, &plogmgr)))
{
CreateLoggersAndLog(plogmgr, "example 1");
plogmgr->Release();
}
}
{
ILoggerManager *plogmgr;
if(SUCCEEDED(comstl::co_create_instance(L"{4E7D5C47-8F96-45DE-905D-AA3E9E592DE3}", &plogmgr)))
{
CreateLoggersAndLog(plogmgr, "example 2");
plogmgr->Release();
}
}
{
ILoggerManager *plogmgr;
if(SUCCEEDED(comstl::co_create_instance(L"pantheios.COM.LoggerManager", &plogmgr)))
{
CreateLoggersAndLog(plogmgr, "example 3");
plogmgr->Release();
}
}
{
stlsoft::ref_ptr<ILoggerManager> logmgr;
if(SUCCEEDED(comstl::co_create_instance(CLSID_LoggerManager, logmgr)))
{
CreateLoggersAndLog(logmgr.get(), "example 4");
}
}
{
stlsoft::ref_ptr<ILoggerManager> logmgr;
if(SUCCEEDED(comstl::co_create_instance(L"{4E7D5C47-8F96-45DE-905D-AA3E9E592DE3}", logmgr)))
{
CreateLoggersAndLog(logmgr.get(), "example 5");
}
}
{
stlsoft::ref_ptr<ILoggerManager> logmgr;
if(SUCCEEDED(comstl::co_create_instance(L"pantheios.COM.LoggerManager", logmgr)))
{
CreateLoggersAndLog(logmgr.get(), "example 6");
}
}
return EXIT_SUCCESS;
}
int main()
{
try
{
comstl::com_initialiser coinit;
return main_();
}
catch(std::exception &x)
{
cerr << "Unhandled error: " << x.what() << endl;
return EXIT_FAILURE;
}
catch(...)
{
cerr << "Unhandled unknown error" << endl;
return EXIT_FAILURE;
}
}
static void CreateLoggersAndLog(ILoggerManager *plogmgr, char const *message)
{
stlsoft::ref_ptr<ILoggerManagerMultibyte> logmgrmb = comstl::interface_cast<ILoggerManagerMultibyte>(plogmgr);
VARIANT initArguments;
VARIANT filterSpec;
::VariantInit(&initArguments);
::VariantInit(&filterSpec);
ILogger *plogger;
HRESULT hr = logmgrmb->GetLoggerMultibyte("Console", "creation_functions example", initArguments, filterSpec, &plogger);
if(SUCCEEDED(hr))
{
stlsoft::ref_ptr<ILogger> logger(plogger, false);
stlsoft::ref_ptr<ILoggerMultibyte> loggermb = comstl::interface_cast<ILoggerMultibyte>(logger);
loggermb->LogMultibyte(5, message);
}
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
const CLSID CLSID_LoggerManager = { 0x4E7D5C47, 0x8F96, 0x45DE, { 0x90, 0x5D, 0xAA, 0x3E, 0x9E, 0x59, 0x2D, 0xE3 } };
#endif