搜索了一下,CoInitializeEx(0,COINIT_MULTITHREADED),但是仍然出错,郁闷

解决方案 »

  1.   

    检查其它引用到com的线程是否结束
      

  2.   

    在不同的线程中使用同一个接口,违反了COM接口调用规则
      

  3.   

    多線程情況下,用TInterfaceList來管理接口
      

  4.   

    不是你的线程当中使用CoInitializeEx(0,COINIT_MULTITHREADED)就可以的,关键在于启动接口的线程.
      

  5.   

    另外还要看看COM组件本身是否支持.
      

  6.   

    用法參考這里
    http://www.swissdelphicenter.ch/torry/showcode.php?id=898
      

  7.   

    tcpserver.execute里,启动接口的线程在哪,-_-!!!
      

  8.   

    一个简单的线程程序里使用这个接口没有问题,在TIdTcpServer.Execute里有错误
      

  9.   

    1.关键要看Indy的版本,如果是支持线程池的,那么对于线程CoInitializeEx(0,COINIT_MULTITHREADED)的执行代码应该放在实际的线程开始执行的位置,CoUninitialize放到线程生命周期结束的位置去.
    2.对于使用接口关键在于接口引用计数的维护,对于接口千万一个宿主接口的释放不先于子接口,所有接口的释放不先于CoUninitialize,尽可能不使用隐式接口引用,比如B是A(TA类)下面的接口方法返回TB,C是TB下面的接口方法返回TC,那么千万不能使用:
    var
      C1: TC;
    begin
      C1 := A.B.C;
    end;如此就会造成在该函数执行结束之前有一个隐含的B1存在.而如果直接在end;之前就执行CoUninitialize那么问题就出来了.