#define INC_OLE2 #define STRICT 1 #define _WIN32_DCOM // for CoInitializeEx #include #include #include #include "..\SendMessage\ISendMessage.h" void Message(LPTSTR szPrefix, HRESULT hr) { LPTSTR szMessage; if (hr == S_OK) { _fputts(szPrefix, stdout); return; } if (HRESULT_FACILITY(hr) == FACILITY_WINDOWS) hr = HRESULT_CODE(hr); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //The user default language (LPTSTR)&szMessage, 0, NULL); _tprintf(TEXT("%s: %s(%lx)\n"), szPrefix, szMessage, hr); LocalFree(szMessage); } void main(int argc, char *argv[], char *envp[]) { WCHAR awcProgId[]=L"SendMessage.Application"; ISendMessage *pObj = NULL; BSTR SendMessage; CLSID clsid; HRESULT hr; hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (FAILED(hr)) { Message(TEXT("CoInitializeEx\n"), hr); MessageBox(NULL, TEXT("Error"), TEXT("Message Stream Client"), MB_OK|MB_ICONEXCLAMATION); exit(hr); } hr = CLSIDFromProgID(awcProgId, &clsid); Message(TEXT("Creating Instance...\n"), S_OK); hr = CoCreateInstance(clsid, NULL, CLSCTX_SERVER, IID_ISendMessage, (LPVOID *)&pObj); if (FAILED(hr)) { Message(TEXT("CoCreateInstance\n"), hr); MessageBox(NULL, TEXT("Error"), TEXT("Message Stream Client"), MB_OK|MB_ICONEXCLAMATION); CoUninitialize(); exit(hr); } SendMessage = SysAllocString(L"Message from client\n"); hr = pObj->Send(SendMessage); if (FAILED(hr)) Message(TEXT("SendMessage\n"), hr); pObj->Release(); CoUninitialize(); SysFreeString(SendMessage); Message(TEXT("Done\n"), S_OK); MessageBox(NULL, TEXT("Done"), TEXT("Message Stream Client"), MB_OK|MB_ICONINFORMATION); }