为什么当我使用一个exe的com组件时,我向其中传递一个BSTR参数的变量,但是com中得到的字符串是空值。代码如下:
::CoInitialize(NULL);
IXLockEx *pLockEx = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_XLockEx, NULL, CLSCTX_ALL, 
IID_IXLockEx, (LPVOID*)&pLockEx); if (SUCCEEDED(hr) && NULL!=pLockEx)
{
USES_CONVERSION;



hr = pLockEx->put_SystemID(L"hello");
if (SUCCEEDED(hr))
{
AfxMessageBox(L"OK");
}

if (SUCCEEDED(hr))
{
long nData;

//AfxMessageBox(OLE2T(out));
pLockEx->Release();
}

}
::CoUninitialize();
其中hr都是范围正确的值。
谢谢大家了。

解决方案 »

  1.   

    BSTR不是宽字符,直接写L"hello"是错误的。
    ::CoInitialize(NULL);
    IXLockEx *pLockEx = NULL;
    HRESULT hr = ::CoCreateInstance(CLSID_XLockEx, NULL, CLSCTX_ALL,
    IID_IXLockEx, (LPVOID*)&pLockEx);if (SUCCEEDED(hr) && NULL!=pLockEx)
    {
    USES_CONVERSION; hr = pLockEx->put_SystemID(_bstr_t(L"hello"));
            // 或者BSTR bstr = SysAllocString(L"hello"); hr = pLockEx->put_SystemID(bstr); SysFreeString(bstr);
    if (SUCCEEDED(hr))
    {
    AfxMessageBox(L"OK");
    } if (SUCCEEDED(hr))
    {
    long nData; //AfxMessageBox(OLE2T(out));
    pLockEx->Release();
    }}
    ::CoUninitialize();