C++ では、次のような OLE メソッドを呼び出そうとしています。
HRESULT GetFirstMono(
[out] BSTR* name,
[out, retval] BSTR* monoID);
次のコードを使用して呼び出します ( http://www.codeproject.com/KB/office/MSOfficeAuto.aspxから適応):
int cArgs = 1;
DISPPARAMS dp = { NULL, NULL, 0, 0 };
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispID;
VARIANT *pArgs = new VARIANT[cArgs+1];
// Extract arguments...
for(int i=0; i<cArgs; i++) {
pArgs[i] = va_arg(marker, VARIANT);
}
// Build DISPPARAMS
dp.cArgs = cArgs;
dp.rgvarg = pArgs;
// Make the call!
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, nType, &dp,
pvResult, NULL, NULL);
if(cArgs == 1) {
std::cout << "oleCall()" << std::endl;
std::cout << "vt: " << dp.rgvarg[0].vt << std::endl;
}
プログラムはクラッシュせずに実行され、monoIdの出力 BSTR*を受け取りますpvResult(期待する値を取得します)。しかし、名前を見つける代わりに、空のバリアントのみを取得しますdp:rgvarg[0]。つまり、端末で表示されます
oleCall()
vt: 0
. LabView から呼び出すと、まったく同じメソッドが正常に機能するため、コードのどこかに問題があると考えられます。名前の出力を回復するにはどうすればよいですか?