描述:
我编写了一个程序,在其中使用了多线程,在主进程中创建了子线程,子线程中,调用了如下代码:
CLSID clsid;
CLSIDFromProgID(L"AutoCAD.Application",&clsid);
IUnknown* pUnk;
HRESULT hr=::CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IUnknown,(void**)&pUnk);
IDispatch* pDispApp;
IAcadApplication *IApp = new IAcadApplication();
IApp->SetVisible(FALSE);
hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDispApp);
*IApp=pDispApp;
我怎么才能在我的主函数中调用IApp指针呢?注意什么问题呢?
我用了
::PostMessage(hwnd, 1500,0,(LPARAM)IApp)
还是不行,主函数里虽然得到的地址相同,但是,去不能调用IApp指针所对应的函数,以调用,就挂。
谢谢大哥大姐帮忙。
解决方案1:
用列集跟散集:
IStream *pStram1 = NULL;
HRESULT hr = ::CoMarshalInterfaceInStream(IID_IDispatch, pDispApp, &pStream1);
if (hr == S_OK) // 传递接口指针给另一个线程
::PostMessage(hwnd, 1500,0,(LPARAM)pStream1);
//////////////////////////////////////////////////////////////////////////
IDispatch* pDisp = NULL;
HRSULT hr = S_OK;
IStream *pStram2 = (IStream*)pStream1;
hr = ::CoGetInterfaceAndReleaseStream(pStream2, IID_IDispatch, (void**)&pDisp);
if (hr == S_OK)
;// 使用接口