我编写了一个程序,在其中使用了多线程,在主进程中创建了子线程,子线程中,调用了如下代码:
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)
       ;// 使用接口
      

  2.   

    对,典型用法就是把主线程里面的ADO智能指针(比如_ConnectionPtr)传给线程。