[求助]如何在多线程中创建Ole对象?请大侠不吝赐教!谢先了!:) ( 积分: 100 )

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

lanse_fengye

Unregistered / Unconfirmed
GUEST, unregistred user!
以下的代码是一个多线程的类。
其它的执行都正常,但当执行到objWordApp:= CreateOleObject('Word.Application');这一句就报错,
错误信息如下:
“raised exception calss EOleSysError with message '尚未调用CoInitialize.'”
如果哪位大侠知道原因的话,烦请告知。小弟不胜感激!!!小弟谢先了! :)
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, StdCtrls,ComObj;
type
TMyThread=class(TThread)
private
Fedt: TEdit;
FobjWordApp: variant;
protected
procedure Execute();override;
public
constructor Create(edt: TEdit;objWordApp: variant);
end;
implementation
constructor TMyThread.Create(edt: TEdit;objWordApp: variant);
begin
Fedt:= edt;
FobjWordApp:= objWordApp;
FreeOnTerminate:= True;
inherited Create(false);
end;

procedure TMyThread.Execute;
var
intIndex: integer;
objWordApp: variant;
begin
while Truedo
begin
intIndex:= strtointdef(trim(Fedt.Text),0);
intIndex:= intIndex + 1;
Fedt.Text:= inttostr(intIndex);
if intIndex >= 100000 then
break;
end;
[red]objWordApp:= CreateOleObject('Word.Application');[/red]
end;

end.
 
以下的代码是一个多线程的类。
其它的执行都正常,但当执行到objWordApp:= CreateOleObject('Word.Application');这一句就报错,
错误信息如下:
“raised exception calss EOleSysError with message '尚未调用CoInitialize.'”
如果哪位大侠知道原因的话,烦请告知。小弟不胜感激!!!小弟谢先了! :)
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, StdCtrls,ComObj;
type
TMyThread=class(TThread)
private
Fedt: TEdit;
FobjWordApp: variant;
protected
procedure Execute();override;
public
constructor Create(edt: TEdit;objWordApp: variant);
end;
implementation
constructor TMyThread.Create(edt: TEdit;objWordApp: variant);
begin
Fedt:= edt;
FobjWordApp:= objWordApp;
FreeOnTerminate:= True;
inherited Create(false);
end;

procedure TMyThread.Execute;
var
intIndex: integer;
objWordApp: variant;
begin
while Truedo
begin
intIndex:= strtointdef(trim(Fedt.Text),0);
intIndex:= intIndex + 1;
Fedt.Text:= inttostr(intIndex);
if intIndex >= 100000 then
break;
end;
[red]objWordApp:= CreateOleObject('Word.Application');[/red]
end;

end.
 
objWordApp: variant 修改成olevariant看看,另外是不是和全局变量有冲突
constructor TMyThread.Create(edt: TEdit;objWordApp: variant);
这里,你换把名字看看
 
procedure TMyThread.Execute;
begin
CoInitialize(nil);
try
{ 实际工作代码 }
finally
CoUninitialize;
end;
end;
 
学了一招,注意要引用Activex单元
参考
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1721411
标题: 简单的线程代码出错,帮忙看看原因.谢谢.
 
谢谢lichengbin大哥及chenybin大哥
通过您们的帮助,该问题已经解决了!
谢谢您们了!:)
 
后退
顶部