线程中的接口问题。 (100分)

  • 主题发起人 主题发起人 darnis
  • 开始时间 开始时间
D

darnis

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个线程中创建了一个Automation对象,而且我在线程里定义了一个属性就是对这
个automation对象接口的引用。
但是为啥我通过这个线程的automation属性来访问Automation服务器时,总给我显示一
个错误信息"应用程序的OS或OS版本不正确"的异常信息,是怎么回事?

TMyThread = class (TThread)
private
FAutoCAD: IAcadApplication;
protected
procedure Execute;override;
.....
public
property AutoCAD: IAcadApplication read FAutoCAD;
end;

procedure TMyThread.Execute;
begin
....
FAutoCAD:=GetActiveOleObject('AutoCAD.application') as IAcadApplication;
// 成功。
....
end;

下面的一个过程中创建了 TMythread的一个实例。
var
test: TMyThread;
begin
test:=TMyThread.Create(false);
test.waitfor;
test.AutoCAD.application.quit; // 这里就会出现'应用程序的OS或OS版本不正确'的异常信息。
end;





--------------------------------------------------------------------------------



 
>>>>test.AutoCAD.application.quit;
你肯定你的线程(test)此时已经执行了Execute吗?(我觉得此时控制还在主进程中,线程execute还没机会执行呢,
test.create(false);立即返回主进程, 在主进程运行时线程没机会。)
 
可以先判断一下test.AutoCAD是否为nil如果不为nil,则在调用接口中方法
 
可以肯定一点的是, test.AutoCAD 已经被赋予了接口的引用的,
反正是在 Execute 内使用 AutoCAD 接口就没有问题的,
线程结束后,通过线程的实例来访问就不行了。

查MSDN 说我这是什么操作系统跟我的软件的操作不系统不兼容还是怎么来着,
要我重装系统再试。 :-(
大侠们有没有遇到过这种问题啊?
 
在线程的构造方法里加上这个
FreeOnTerminated := False;

 
问题已经解决了,谢谢你哈,tseug
这边这个问题已经是我好久以前提的了,
我把代码重写了一下..
:-)
 
后退
顶部