开的线程有没有CoInitialize?另外直接传指针不行吧?跨套间要Marshal的,要么两个都是属于一个自由线程套间。

解决方案 »

  1.   

    To plato(天天): 
    //IDataPipe* pDataPipe;
    IStream* pStream=NULL;
    HRESULT hr=CoMarshalInterThreadInterfaceInStream(IID_IDataPipe,NULL,&pStream);
    if(SUCCEEDED(hr))
    {
    }
    我这样调用对不对?
      

  2.   

    如果你是在主线程中创建的组件对象,显然不能把他直接传到另外的线程中,方法如下:
    HRESULT hr;
    IDataPipe* pDataPipe
    IStream *pStream = NULL;//首先获得pDataPipe接口指针!(略)hr = CoMarshalInterThreadInterfaceInStream(IID_IDataPipe, pDataPipe, &pStream);
    if (FAILED(hr))
    {
    }然后你在创建线程时传递的参数应该是这样的:
    CreateThread(……,(LPVOID)pStream);在你创建线程中必须从pStream中取回接口指针:
    HRESULT hr;
    IDataPipe* pDataPipe;CoInitializeEx(NULL, COINIT_MULTITHREADED);hr = CoGetInterfaceAndReleaseStream(pStream, IID_IDataPipe,(void **)&pDataPipe);
    if (FAILED(hr))
    {
    }试试看先!
      

  3.   

    WhiteWaterBlueSky写的完全对,这样就可以了。