/////////////////////////////////////////////////////////////// // client.cpp - client for outproc3b (STA Component) // // // // Platform: Micron Dual Pentium 200, WinNT 4.0, SP3 // // Application: Demonstration for CSE791 - Distrib. Objs // // Authors: Eddon & Eddon, Inside Distributed COM, // // Microsoft Press, 1998 // // Modified: Jim Fawcett, Syracuse Univ, CST 2-187 // // (315) 443-3948, fawcett@ecs.syr.edu // /////////////////////////////////////////////////////////////// #define _WIN32_DCOM #include #include #include "Component\component.h" using namespace std; void main() { cout << "Client: Calling CoInitialize()" << endl; CoInitialize(NULL); IUnknown* pUnknown = NULL; ISum* pSum; HRESULT hr = 0; cout << "Client: Calling CoCreateInstanceEx() " << endl; ///////////////////////////////////////////////// // - These work if you want to talk to another // process on the same machine or across a // network. // - The message is that this style client works // for both scenarios. // // wchar_t *machine = L"127.0.0.1"; // wchar_t *machine = L"localhost"; wchar_t *machine = L"\\\\Columbia"; COSERVERINFO csi; csi.dwReserved1 = 0; csi.pwszName = SysAllocString(machine); csi.pAuthInfo = NULL; csi.dwReserved2 = 0; DWORD context = CLSCTX_SERVER; // CLSCTX_INPROC_SERVER | // CLSCTX_LOCAL_SERVER | // CLSCTX_REMOTE_SERVER MULTI_QI mqi[1]; mqi[0].pIID = &IID_IUnknown; mqi[0].pItf = NULL; mqi[0].hr = 0; CoCreateInstanceEx( CLSID_InsideDCOM, NULL, context, &csi, 1, // size of mqi array mqi ); SysFreeString(csi.pwszName); pUnknown = mqi[0].pItf; hr = mqi[0].hr; if(FAILED(mqi[0].hr)) { cout << "\n CoCreateInstanceEx failed\n\n"; _com_error err(hr); cout << err.ErrorMessage() << "\n\n"; return; } DWORD ID = GetCurrentThreadId(); cout << "\n client STA thread ID is " << ID << "\n\n"; cout << "Client: Calling QueryInterface() for ISum on " << pUnknown << endl; hr = pUnknown->QueryInterface(IID_ISum, (void**)&pSum); if(FAILED(hr)) cout << "QueryInterface FAILED" << endl; cout << "Client: Calling Release() for pUnknown" << endl; hr = pUnknown->Release(); cout << "Client: pSum = " << pSum << endl; int sum; hr = pSum->Sum(4, 9, &sum); if(SUCCEEDED(hr)) cout << "Client: Calling Sum() return value is " << sum << endl; cout << "Client: Calling Release() for pSum" << endl; hr = pSum->Release(); cout << "Client: Calling CoUninitialize()" << endl; CoUninitialize(); }