/////////////////////////////////////////////////////////////// // client.cpp - client for outproc3 (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 "Component\component.h" using namespace std; void main() { cout << "Client: Calling CoInitialize()" << endl; CoInitialize(NULL); IUnknown* pUnknown; IDispatch* pDispatch; ISum* pSum; cout << "Client: Calling CoCreateInstance() " << endl; CoCreateInstance( CLSID_InsideDCOM, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pUnknown ); DWORD ID = GetCurrentThreadId(); cout << "\n client STA thread ID is " << ID << "\n\n"; cout << "Client: Calling QueryInterface() for ISum on " << pUnknown << endl; HRESULT hr = pUnknown->QueryInterface(IID_ISum, (void**)&pSum); if(FAILED(hr)) cout << "QueryInterface FAILED" << endl; 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 QueryInterface() for IDispatch on " << pUnknown << endl; pUnknown->QueryInterface(IID_IDispatch, (void**)&pDispatch); cout << "Client: Calling Release() for pUnknown" << endl; hr = pUnknown->Release(); cout << "Client: Calling GetIDsOfNames" << endl; OLECHAR* name = L"Sum"; DISPID dispid; pDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid); cout << "GetIDsOfNames(Sum) = " << dispid << endl; VARIANTARG test[2]; VariantInit(&test[0]); test[0].vt = VT_I4; test[0].lVal = 7; VariantInit(&test[1]); test[1].vt = VT_I4; test[1].lVal = 2; VARIANT result; VariantInit(&result); DISPPARAMS param = { test, 0, 2, NULL }; if(FAILED(pDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &result, NULL, NULL))) cout << "pDispatch->Invoke() failed" << endl; cout << test[0].lVal << " + " << test[1].lVal << " = " << result.lVal << endl; pDispatch->Release(); cout << "Client: Calling CoUninitialize()" << endl; CoUninitialize(); }