オブジェクトこれらのオブジェクトのうち:SAFEARRAYは、私はCOMライブラリを使用していると私は、次のよう.tlhファイルで定義されたインタフェースを持っている
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = 2;
rgsabound[0].lLbound = 0;
SAFEARRAY *pData = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
LONG i = 0;
SafeArrayPutElement(pData, &i, pMyInterface1);
i = 1;
SafeArrayPutElement(pData, &i, pMyInterface2);
しかし、この配列要素の後も空のままです。このIMyInterfacePtrオブジェクトの配列を埋める適切な方法はどれですか?
ありがとうございました。
------ EDIT ------答えを
感謝。コメントからこれらのソリューションを試しましたが、残念ながらまだ動作しません。この配列をCOMメソッドでCOMに送り返す必要があります。 (SAFEARRAY *value)
:put_Response
は署名を以下ました
IResponsePtr pResponse;//This is also smart com ptr
pResponse.CreateInstance(CLSID_Response);
pResponse->put_Response(pData);//safearray here
:だから私は、新しいオブジェクトを作成しています。 残念ながら、このメソッドを呼び出す時に、私は次の例外を取得しています:
First-chance exception at 0x76BEC54F in MyApp.exe: Microsoft C++ exception: EEException at memory location 0x0042F144.
First-chance exception at 0x76BEC54F (KernelBase.dll) in MyApp.exe: 0xE0434352 (parameters: 0x80131533, 0x00000000, 0x00000000, 0x00000000, 0x72D30000).
このSAFEARRAYのPTRと間違っているかもしれないものの任意のアイデア?
例外として、コールスタックを示します。 COMコンポーネントの開発者に問い合わせてください。多分あなたのインターフェースは間違っています...多くの可能性に...あなたの編集は新しい質問です。元のものとは何の関係もありません。この質問に回答してください。新しい質問を作成し、あなたが持っている新しいコードを表示してください。 – xMRi