CoInitialize(NULL); //mcp interface
IMCPPublishImpl * pMcpPublish=NULL;
//create mcp object
HRESULT hr=CoCreateInstance(CLSID_Publish, NULL, CLSCTX_INPROC_SERVER, 
                  IID_IPublish, (void **)&pMcpPublish); if(FAILED(hr))
{
return hr;
} pMcpPublish->put_MaxBitrate(3750000);

pMcpPublish->put_VideoHSize(0);
pMcpPublish->put_VideoVSize(0);
pMcpPublish->put_VideoBitRate(0); pMcpPublish->put_PublishFilename(L"c:\\ftphome\\000003e8"); pMcpPublish->put_SubscribeFilename(L"00080310");

pMcpPublish->put_PublisherIP(L"192.168.80.131"); if(FAILED(pMcpPublish->AddSubscriber(L"192.168.80.131",L"")))
{
return 0;
}// pMcpPublish->SetEventCallback((CALLBACK), this) long nRet;
pMcpPublish->Start(&nRet);

if(FAILED(pMcpPublish->WaitForFinish(1000)))
return 0;
pMcpPublish->Release();
CoUninitialize();

return 0;不知道这段代码哪里有问题,调用com以前都这样的,释放也是这样都非常好,为什么这次不行,每次运行到 CoUninitialize();就出错,各位高手有碰到类似的问题吗?快来帮我啊。说明:
这段代码是房子一个线程中单独执行的

解决方案 »

  1.   

    其实不是运行到CoUninitalize()出错,而是执行return 0的时候错,好象返回地址被改了,难道是缓冲区益处???但如果不调用CoUnitialize就不会出问题,大家帮我分析一下问题究竟出在哪里呢???在线等待,谢谢!!I'm be Online
      

  2.   


    try
    {
    //
    }
    catch(_com_error &e)
    {
    MessageBox(e.xx());
    }
    看看
      

  3.   

    1你的这段代码是写在那里的?
    2GetLastError()看看能不能得到有用的信息
      

  4.   

    用GetLastError看也是好的,就是函数返回的时候就挂了,我怀疑是返回地址被修改了。写在一个函数中,这个函数是在一个单独的线程中调用的,谢谢
      

  5.   

    用了 ,错误照出。。郁闷啊,谢谢你兄弟
    -------------------
    你是和我说话吗?如果是的话,你这个要加到调用此函数的函数中,如
    try
    {
     yourfun();
    }
    catch(_com_error &e)
    {
    MessageBox(e.xx());
    }
      

  6.   

    CoUninitialize();就出错
    ===============
    提示什么错误信息?其他的调用都正常吗?
      

  7.   

    对 mahatma_cn(好草不给回头牛吃) 兄弟说:是这样加的,不行,直接就在函数返回的时候down掉
      

  8.   

    对 vcleaner(我没做大哥已经很久了.......) ( )兄弟说:我刚才没说明白,不是CoUninitialize();出错,而是在函数返回的时候出错,也就是执行完return 0
    之后,
      

  9.   

    你的最后一句就是“return 0;”啊
    也许都执行正确了,最后返回0啊
      

  10.   

    终于看明白了,如果没有猜错的话,还是那句CoUninitialize();出错了。
    你检查一下CoInitialize是否成功?
    另外如果是线程中这么做可能需要对线程做一些操作。
    你看看MSDN这一段:
    CoUninitialize should be called on application shutdown, as the last call made to the COM library after the application hides its main windows and falls through its main message loop. If there are open conversations remaining, CoUninitialize starts a modal message loop and dispatches any pending messages from the containers or server for this COM application. By dispatching the messages, CoUninitialize ensures that the application does not quit before receiving all of its pending messages. Non-COM messages are discarded.
      

  11.   

    是阿 ,我的线程返回0是没有问题的啊。还有一个现象在这里也说一下就是,如果我在CoUninitialize();一句上加个断点然后单步执行下去就会down掉,如果不加断点就不会。另外release() 和 CoUninitialize()两者有一个不调用也不会有问题愁死我了
      

  12.   

    楼上的兄弟现在就你支持我了,谢谢!
    那个函数我用GetLastError看是成功的,另外你说的那段英文代码我可能不能够很到位的理解。我现在做个实验
      

  13.   

    那可能就是你的引用计数部分出了问题,导致在卸载COM库的时候还存在未完结的调用指针存在。