// // Client.cpp - client implementation // #include <iostream.h> #include <objbase.h> #include "Iclient.h" void trace(const char* msg) {cout << "Client: \t\t" << msg << endl;} // All these GUIDS where generated using GUIDGEN.EXE and are // globally unique for each interface. // {59FA0200-13FF-11d1-883A-3C8B00C10000} extern "C" const IID IID_IAddSub = {0x59fa0200, 0x13ff, 0x11d1, {0x88, 0x3a, 0x3c, 0x8b, 0x0, 0xc1, 0x0, 0x0}}; // {59FA0201-13FF-11d1-883A-3C8B00C10000} extern "C" const IID IID_IMulDiv = {0x59fa0201, 0x13ff, 0x11d1, { 0x88, 0x3a, 0x3c, 0x8b, 0x0, 0xc1, 0x0, 0x0}}; // {59FA0202-13FF-11d1-883A-3C8B00C10000} extern "C" const IID IID_ITrigonometry = {0x59fa0202, 0x13ff, 0x11d1, { 0x88, 0x3a, 0x3c, 0x8b, 0x0, 0xc1, 0x0, 0x0}}; // {59FA0203-13FF-11d1-883A-3C8B00C10000} extern "C" const CLSID CLSID_ClassFactory = { 0x59fa0203, 0x13ff, 0x11d1, { 0x88, 0x3a, 0x3c, 0x8b, 0x0, 0xc1, 0x0, 0x0 } }; class client_out { public: void operator<<(char*c) { cout<<"COMCalc Client:\t\t"<<c; } }; client_out out; int main() { // Initialize COM Library CoInitialize(NULL) ; cout << "The client calls CoCreateInstance to create " << "a COMCalc object\n" << endl; cout << " and get interface IAddSub.\n" << endl; IAddSub* pIAddSub = NULL ; HRESULT hr = ::CoCreateInstance(CLSID_ClassFactory, NULL, CLSCTX_INPROC_SERVER, IID_IAddSub, (void**)&pIAddSub) ; if (SUCCEEDED(hr)) { out << "Succeeded getting IAddSub. Now we can reference " << "its member functions\n" ; // Use interface IAddSub. cout << "3+3=" << pIAddSub->Add(3,3) << endl; cout << "3-3=" << pIAddSub->Subtract(3,3) <<endl; out << "Ask for interface IMulDiv.\n" ; IMulDiv* pIMulDiv = NULL ; hr = pIAddSub->QueryInterface(IID_IMulDiv, (void**)&pIMulDiv) ; if (SUCCEEDED(hr)) { out<<"Got IMulDiv.\n" ; // Use interface IMulDiv. cout << "3*3=" << pIMulDiv->Multiply(3,3) << endl; cout << "3/3=" << pIMulDiv->Divide(3,3) << endl; pIMulDiv->Release() ; out<<"Release IMulDiv interface.\n" ; } else { out<<"Could not get interface IMulDiv.\n" ; } out << "Ask for interface ITrigonometry.\n" ; ITrigonometry* pITrigonometry = NULL ; hr = pIAddSub->QueryInterface(IID_ITrigonometry, (void**)&pITrigonometry) ; if (SUCCEEDED(hr)) { out << "Got interface ITrigonometry.\n" ; pITrigonometry->Release() ; out << "Release ITrigonometry interface.\n" ; } else { out << "Could not get interface ITrigonometry.\n" ; out << "Perhaps a later version of comCalc will support it.\n"; } out << "Release IAddSub interface.\n" ; pIAddSub->Release() ; } else { cout << "Could not create component. hr = " << hex << hr << endl ; } // Uninitialize COM Library CoUninitialize() ; return 0 ; } //End of File