[求助] 线程使用了synchronize 以后,怎样才能使用 CreateOleObject??? [求助](200分)

  • 主题发起人 主题发起人 叶不归
  • 开始时间 开始时间

叶不归

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序里有一个线程,这个线程用到了VCL等原因,必须使用syhncronize方式执行,
然而,在同步方式下调用com,如createOleObject是会报错的:
错误:“正在发送一个输入同步呼叫,所以无法执行传出的呼叫”
请教如何解决这个问题呢?
procedure TTestThread.execute;
begin
synchronize(dodo);
//----由于种种原因,必须使用同步方式
end;

procedure TTestThread.dodo;
begin
......
createOleObject('Excel.Application');
//在同步方式下调COM出错
end;
使用了synchronize 以后,有没有办法让其使用 CreateOleObject ??
 
试过加下面这个没有?
initialization
CoInitializeEx(nil,COINIT_MULTITHREADED);
finalization
CoUninitialize;
 
线程包含线程应该是不可以的吧..COM本身就是一个进程来着吧.
 
不如在主线程里创建了com对象,然后再线程里调用看看
 
to luzhouman:
加那两句是可以,但是在程序另一个模块里会报:connot obtain OLE window handle.
因此不能用CoInitializeEx. 还有其他办法吗?
to lxw5214:
在主程序里可以创建,但在线程里用其属性时,一样会报:正在执行呼入...不能呼出...
 
后退
顶部