我用ATL写了一个组件,用来测试在客户和组件之间传递BSTR值。组件提供一个接口方法,该方法接受由客户传递过来的BSTR值,并将该BSTR值显示出来。该接口方法的IDL定义和实现如下:
[id(1), helpstring("method Show")] HRESULT Show([in]BSTR bstrA);STDMETHODIMP CShowBstr::Show(BSTR bstrA)
{
// TODO: Add your implementation code here
::MessageBox(NULL,_bstr_t(bstrA),"",MB_OK);
return S_OK;
}
用VC++写的客户端程序如下:
void CTestDlg::OnShow() 
{
// TODO: Add your control notification handler code here
HRESULT hr;
IShowBstr* pShowBstr;
BSTR bstrtest = L"Hello World!"; hr = ::CoInitialize(NULL);
hr = ::CoCreateInstance(CLSID_ShowBstr,NULL,CLSCTX_SERVER,IID_IShowBstr,(void**)&pShowBstr);
pShowBstr->Show(bstrtest);
pShowBstr->Release();
::CoUninitialize();
}
以上两工程编译连接均正确,但当执行VC代码中的pShowBstr->Show(bstrtest);
时,却不显示“Hello World!",我跟踪组件发现,原来客户端的bstrtest根本就没有被组件的bstrA接受,所以也就什么都不显示了。那么者端客户代码究竟错在哪呢?