多线程访问OLE Automation server 的问题(200分)

  • 主题发起人 主题发起人 lytime
  • 开始时间 开始时间
L

lytime

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好:
我在D4下做了一个OLE Automation 服务器,我想在一个多线程的程序中调用该服务器,但只有在主线程中调用没有问题,在其他线程中无法访问该服务器,令人困惑,还请各位热心高手指点迷津
 
因为什么
报什么错
 
是不是调用方法有问题???
set xxx=server.createobject("xxxserver.yyy")
最后要
set xxx=nothing
 


我在非主线程的Execute中用的是Colyly.Create调用该服务器
显示错误信息为:
尚未调用CoInitialize。
另外,如果在主线程中使用Colyly.Create,在非主线程中访问
服务器接口,会出现同样错误信息。
 
很显然,在非主线程中调用COM时应先调用CoInitialize过程
 
请注意Threading Mode的选用.
single 和apartment模式的server只能在创建此server实例
的客户线程中调用,不如用Free或Both试试.
 
用 Synchronize
否则肯定出错。
 
每个线程访问/create这个对象之前,都要调用coInitialize。
 
这是线程中调用COM必须的,例如:

uses ActiveX;

procedure MyThread.Execute;
begin
CoInitialize(nil);
try
// your code
finally
CoUninitialize;
end;
end;
 
多人接受答案了。
 
后退
顶部