我有奇怪的問題,從VARIANT
結構閱讀BSTR
值。無法獲得BSTR數據的確切位置在VARIANT結構
我用下面的JavaScript代碼將數據發送到C++代碼:
external.CppCall("zhttShow", 1, "Y");
在我的C++代碼的Invoke
功能,我試圖訪問數據:
HRESULT STDMETHODCALLTYPE WebBrowser::Invoke(_In_ DISPID dispIdMember, _In_ REFIID riid, _In_ LCID lcid, _In_ WORD wFlags, _In_ DISPPARAMS *pp, _Out_opt_ VARIANT *pVarResult, _Out_opt_ EXCEPINFO *pExcepInfo, _Out_opt_ UINT *puArgErr)
{
if (dispIdMember == 100)
{
unsigned int k = pp->cArgs;
if (k > 0)
{
VARIANT *vVariant = &pp->rgvarg[k - 1];
if ((vVariant->vt & VT_BSTR) == VT_BSTR && vVariant->pvarVal->bstrVal)
{
wchar_t *wide = (wchar_t*)(vVariant->pvarVal->bstrVal);
// other code
}
}
}
}
在上面的代碼中, wide
指向未定義的位置。如果我得到vVariant->pvarVal->bstrVal
這點的指針接近BSTR值的位置:到behide的BSTR
數據8個字節的位置
VARIANT *vVariant = &pp->rgvarg[k - 1];
if ((vVariant->vt & VT_BSTR) == VT_BSTR && vVariant->pvarVal->bstrVal)
{
wchar_t *wide = (wchar_t*)(&vVariant->pvarVal->bstrVal);
// other code
}
wide
點,這樣反而得到「zhttShow」串,我只得到「顯示」。如果我減去wide
4我會得到所需的數據。
貝婁是調試屏幕第二C++代碼:
問:
爲什麼wide
沒有指向BSTR的確切位置?我的代碼中有什麼錯誤,以及如何解決它?