PHP如何從COM組件中擷取返回的字串?
COM組件中定義一個方法
HRESULT GetStr([in,out] BSTR* vStr, [in,out] LONG* vLen, [out,retval] LONG* vError);
方法實現為:
C/C++ code
STDMETHODIMP MC_MyClass::GetStr(BSTR* vStr, LONG* vLen, LONG* vError){ *vError = 0; if(0 == vStr) return S_FALSE; if(0 == vLen) return S_FALSE; wchar_t tStr[] = L"This is a string from com!"; memcpy(*vStr, tStr, wcslen(tStr)); *vLen = wcslen(tStr); *vError = 1; return S_OK;}
PHP調用該方法
C/C++ code
$tStr = "";$tLen = 100;$tStr = str_pad($tStr, $tLen, "0");$tRes = $tCom->GetStr(&$tStr, &$tLen);
結果
$tRes = 1;
$tStr = "";
$tLen = 26;
求解:為什麼$tStr為空白?
------解決方案--------------------
可能要用 vsscanf 函數取回
由於沒有測試條件,無法給出進一步的建議
------解決方案--------------------
memcpy(*vStr, tStr, wcslen(tStr));
wcslen是求UNICODE字元個數, memcpy是拷貝位元組個數, 很明顯應該wcslen(tStr)*2,另外也不是*vStr,直接是vStr.
------解決方案--------------------
探討
memcpy(*vStr, tStr, wcslen(tStr));
wcslen是求UNICODE字元個數, memcpy是拷貝位元組個數, 很明顯應該wcslen(tStr)*2,另外也不是*vStr,直接是vStr.