FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
Dobbs M-Dev
Email
Print
Reprint

add to:
Del.icio.us
Digg
Google
Furl
Slashdot
Y! MyWeb
Blink
March 01, 1998

Control How COM Marshals Your Data

(Page 17 of 20)
March 1998/Control How COM Marshals Your Data/Listing 5

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
Previous Page | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 Next Page
TOP 5 ARTICLES
No Top Articles.



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK