如何在线程中调用主进程的com+资源(200分)

  • 主题发起人 主题发起人 firstshine
  • 开始时间 开始时间
F

firstshine

Unregistered / Unconfirmed
GUEST, unregistred user!
以下程序触发EOlesyserror:消息筛选器显示应用程序正在使用中
function TForm1.sjjs:string;
//数据检索:根据提供的sql语句检索数据
//sql:需要检索的sql语句,应该是一个select语句
var
oleSjj:OleVariant;//返回的数据集
dtstSjj:TClientDataset;
IJk1:IUnknown;
IMTS:ISwxtdx;//应用服务器mts接口
begin
IJk1:=CreateRemoteComObject('10.68.7.7',CLASS_Swxtdx);//创建MTS对象
IMTS:=IJk1 as ISwxtdx;
dtstSjj:=TClientDataset.Create(nil);
try
IMTS.Sjjs('select * from yxgl.hcs',oleSjj);//调用服务器的方法取得数据
dtstSjj.Data:=oleSjj;
dtstSjj.CommandText:='select * from yxgl.hcs';
result:=inttostr(dtstsjj.recordcount);
finally
dtstsjj.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
tjmsx.Create(false);
end;

procedure tjmsx.Execute;
begin
Synchronize(jmtz);
end;

procedure tjmsx.Jmtz;//界面调整过程
var
m:string;
begin
m:=form1.sjjs;
form1.caption:=m;
end;
 
随便说说。
据我的经验COM在多线程下是会报错的,但你用了Synchronize,应该就不关多线程的事了。
你可以试试看不用多线程会不会报错,然后再找原因。
 
不用多线程不会出错,我之所以把com+资源放在主线程是因为考虑性能,因为建立一个com+
对象太花时间了
 
我也在做一个三层结构的程序,但是问题不是中断线程的时候,而是出在关闭这个FORM
的时候。请教各位有什么高见吗?
 
多人接受答案了。
 
firstshine, 您好:
请问这个问题您解决了吗?是如何解决的,谢谢!
我在多线程中调用主线程中的COM+资源时,报了没有调用CoInitialize的错误。
 
后退
顶部