C
chzi826
Unregistered / Unconfirmed
GUEST, unregistred user!
主程序EXE里有一记录类型,需要赋值的数据很多,如:
Type Taa=Record
Id:Word;
s1:Array[1..500]Of String;
s2:Array[1..500]Of Integer;
........
End;
主程序EXE里会有很多个线程,每个线程都定义有该记录类型,每个线程都会调用DLL对该记录进行不同数据的装填,装填完毕各线程会各自进行分析处理。
我的程序在线程里是直接用实参方式把该记录传递给Dll的,DLL就直接对记录进行赋值:
procedure (var aa:Taa);stdcall;
begin
aa.id:=1;
aa.s1[1]:='..';
.....
end;
出现问题
我现在使用的是Delphi2007,编译后的程序开启6,7个线程同时执行以上操作,在我的机子上跑比较稳定,偶尔会出现异常错,但在朋友的机子上(试了2台)几乎时一创建4,5个线程就绝对会出异常错,在做程序初期就知道原本EXE和Dll之间的数据用实参传递是不可行的,但听说Delphi2007已经能很好的解决这个问题了,所以才使用了该方法,但就现在看来当数据量大到一定程度还是不安全。
所以希望各位友人帮帮忙,有什么简单的方法可以让EXE和DLL之间的大量数据能安全的互访。
Type Taa=Record
Id:Word;
s1:Array[1..500]Of String;
s2:Array[1..500]Of Integer;
........
End;
主程序EXE里会有很多个线程,每个线程都定义有该记录类型,每个线程都会调用DLL对该记录进行不同数据的装填,装填完毕各线程会各自进行分析处理。
我的程序在线程里是直接用实参方式把该记录传递给Dll的,DLL就直接对记录进行赋值:
procedure (var aa:Taa);stdcall;
begin
aa.id:=1;
aa.s1[1]:='..';
.....
end;
出现问题
我现在使用的是Delphi2007,编译后的程序开启6,7个线程同时执行以上操作,在我的机子上跑比较稳定,偶尔会出现异常错,但在朋友的机子上(试了2台)几乎时一创建4,5个线程就绝对会出异常错,在做程序初期就知道原本EXE和Dll之间的数据用实参传递是不可行的,但听说Delphi2007已经能很好的解决这个问题了,所以才使用了该方法,但就现在看来当数据量大到一定程度还是不安全。
所以希望各位友人帮帮忙,有什么简单的方法可以让EXE和DLL之间的大量数据能安全的互访。