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:
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; }