Previous IDL Connectivity Bridges: COM Object Creation Next

C++ Client Code Sample

The C++ project must somewhere include the following line, in order to pull in the CoClass and Interface definitions for the wrapper object:

#import "IDLexFoo.tlb" no_namespace no_implementation \  
   raw_interfaces_only named_guids  

For details about the object parameters, see Sample IDL Object.

Initiation Without Parameters in C++

Use the following code to initialize the object with no parameters.

CComPtr<IIDLexFoo> spFoo;  
  
if ( FAILED(spFoo.CoCreateInstance(__uuidof(IDLexFoo)) || !spFoo) 
)  
return E_FAIL;  
  
CComVariant vtNULL(0);  
HRESULT hr = spFoo->CreateObject(0,vtNULL,vtNULL);  
if ( FAILED(hr) )  
{  
   CComBSTR bstrErr;  
   spFoo->GetLastError(&bstrErr);  
return E_FAIL;  
}  

Initiation with Parameters in C++

Use the following code to initialize the object with its three parameters (a string, a 32-bit long value, and an array that has two rows and three columns, containing 32-bit long values).

CComPtr<IIDLexFoo> spFoo;  
  
if ( FAILED(spFoo.CoCreateInstance(__uuidof(IDLexFoo)) || !spFoo) 
)  
return E_FAIL;  
  
CComSafeArrayBound bound[2];  
bound[0].SetLowerBound(0); bound[0].SetCount(2); // two rows  
bound[1].SetLowerBound(0); bound[1].SetCount(3); // three cols  
  
CComSafeArray<VARIANT> parmArr(bound,2);  
  
long   ndx[2];  
long lData[2][3] = { {10, 11, 12}, {20, 21, 22} };  
  
for ( int i = 0; i < 2; i++ ) {       // row  
   for ( int j = 0; j < 3; j++ ) { // col  
      ndx[0] = i; ndx[1] = j;  
      parmArr.MultiDimSetAt(ndx, CComVariant(lData[i][j]));  
   }  
}  
  
CComBSTR    parmStr = "I am a string parameter";  
CComVariant parmVal = (long)24;  
  
CComSafeArray<VARIANT> argval(3);  
CComSafeArray<long>    argpal(3);  
  
argval[0] = parmStr;   argpal[0] = IDLBML_PARMFLAG_CONST;  
argval[1] = parmVal;   argpal[1] = IDLBML_PARMFLAG_CONST;  
argval[2] = parmArr;   argpal[2] =   
   IDLBML_PARMFLAG_CONST | IDLBML_PARMFLAG_CONVMAJORITY;  
  
long argc = 3;  
CComVariant vargval = argval;  
CComVariant vargpal = argpal;  
  
HRESULT hr = spFoo->CreateObject(argc,vargval,vargpal);  
if ( FAILED(hr) )  
{  
   CComBSTR bstrErr;  
   spFoo->GetLastError(&bstrErr);  
return E_FAIL;  
}  
  

  IDL Online Help (March 06, 2007)