March 01, 1998
Control How COM Marshals Your Data
Listing 5: client.cpp Simple console-mode client app
// COM Marshalling Sample Client
// Author : Fran Heeran
#define INC_OLE2
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <initguid.h>
#include <tchar.h>
#include <conio.h>
#include "marsamp.h"
BOOL flagsArray[FLAG_ARRAY_SIZE];
void FillArray();
int __cdecl main(int argc, char **argv)
{
HRESULT hr;
COSERVERINFO csi, *pcsi;
WCHAR wsz[MAX_PATH];
memset(&csi, 0, sizeof(csi));
pcsi = NULL;
// Get the name of the remote server (if supplied)
if (argc > 1) {
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, argv[1], -1,
wsz, MAX_PATH);
memset(&csi, 0, sizeof(COSERVERINFO));
csi.pwszName = wsz;
pcsi = &csi;
}
// Initialize COM
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
RETURNONFAILURE(hr, "Failed to initialize COM - %0x8X");
// Create the object and get our Interface
MULTI_QI mq;
mq.pIID = &IID_ISimpleObject;
mq.pItf = NULL;
mq.hr = S_OK;
hr = CoCreateInstanceEx(CLSID_SimpleObject, NULL, CLSCTX_SERVER,
pcsi, 1, &mq);
if (FAILED(hr))
printf("Failed to create object - 0x%X", hr);
else {
LPSIMPLEOBJECT pObj = (LPSIMPLEOBJECT)mq.pItf;
// Fill random elements of the array
FillArray();
// Pass it to the server
hr = pObj->DisplayArray(&flagsArray[0]);
if (FAILED(hr))
printf("Failed to display array - 0x%X", hr);
pObj->Release();
}
CoUninitialize();
return 0;
}
// Fills the array of BOOLs with a random mixture of 1's and
// 0's - Also prints the contents of the array for comparison
// with the servers
void FillArray()
{
memset(&flagsArray, 0, sizeof(flagsArray));
srand((unsigned)time( NULL ) );
for (int i = 0;i < FLAG_ARRAY_SIZE;i++) {
if (rand() & 1)
flagsArray[i] = 1;
printf("%d ", flagsArray[i]);
}
}
//End of File
| |||||||||