描述:
struct ITest:public IDispatch //自己实现的一个接口,具体类是CTest
{
virtual STDMETHODIMP Test(LONG A,BSTR* str) = 0;
};
int main()
{
.....
::CoInitialize(NULL);
ITest*itest;
::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,iid,(void**)itest);
itest->Test(2,NULL);
IStream *istream;
::CoMarshalInterThreadInterfaceInStream(iid,(IUnknown*)itest,&istream);
HANDLE handle = ::CreateThread(NULL,0,t,istream,0,0);
//至此为止都成功
::WaitForSingleObject(handle,-1);
itest->Release();
::CoUninitialize();
return 0;
}
DWORD WINAPI t(LPVOID p)
{
::CoInitialize(0);
ITest *it;
::CoGetInterfaceAndReleaseStream((LPSTREAM)p,iid,(void**)&it);
it->Test(34,0);//不成功,错误号为0x800706F4,向占位程序传送了空的索引指针。
it->Release(); //不知道为什么,这里被阻塞了
::CoUninitialize();
return 0;
}
跟踪线程t,it->vptr[0x1c]指向的不是实体类CTest::Test,不知道是为什么,还有就是CoUninitialize被阻塞了,也不知什么原因,望大家指教