我正在嘗試以非 MFC 方式在 c 中重現 COM 客戶端。我能夠連接到 com 介面并呼叫一些需要簡單值作為引數的方法,但是我無法呼叫以指標作為引數的方法,函式是這樣的:
short sProdGetCurrentMachineType(short* p_psMachineType)
并且在short指向的變數p_psMachineType中將存盤結果值。
我試過這個:
DISPID dispid; //omitted for brevity, i get it from QueryInterface() on the com
VARIANT pVarResult;
EXCEPINFO pExcepInfo;
unsigned int* puArgErr = 0;
DISPPARAMS dispparams{};
VARIANTARG rgvarg[1];
short *p_psMachineType;
rgvarg[0].vt = VT_I2;
rgvarg[0].piVal = p_psMachineType;
dispparams.rgvarg = rgvarg;
dispparams.cArgs = 1;
dispparams.cNamedArgs = 0;
hresult = (*pDisp)->Invoke(
dispid,
IID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispparams, &pVarResult, &pExcepInfo, puArgErr
);
但我得到一個TYPE_MISMATCH ERROR..
相反,我看到將它用作命名引數我在呼叫中沒有收到錯誤,但指標值沒有被填充,但我找不到任何作為命名引數傳遞的指標示例。
有人知道如何處理嗎?
uj5u.com熱心網友回復:
正如您自己所說,“在 p_psMachineType 指向的短變數中將存盤結果值”,因此您需要將有效指標傳遞給現有的short.
short psMachineType;
// ...
rgvarg[0].piVal = &psMachineType;
uj5u.com熱心網友回復:
正如 Simon Mourier 所說,在 rgvarg 陣列上設定的正確引數是 VT_I2 | VT_BYREF 而不是 VT_I2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524310.html
標籤:C 指针com
上一篇:將陣列拆分為動態陣列并回傳ptr
