同样的代码在exe和dll中(50分)

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

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
var
S:TStringList;
begin
S:=TStringList.Create;
//这行代码在EXE中调用没有问题.为什么在DLL中调用出错请指教:
S.Assign(StringGrid.Cols);
end;
 
你把DLL的原码完整的贴出来
 
exe知道那个stringgrid,但dll知道它是哪来的?
 
你用了之后释放了没有?
S.Free??

另外你要仔细跟踪一下看是不是就上面两句出的错
 
函数是这样的,如果把函数写在DLL中,在EXE中调用,就会出错,写EXE中调用就没问题(已经引用ShareMem了):
procedure DelGrdRow(StringGrid:TStringGrid;ColsCount:Byte;RowNO:Integer);stdcall;
var
I:Byte;
S:array of TStringList;
begin
if StringGrid.Row>0 then
begin
SetLength(S,ColsCount);
for I:=0 to ColsCount-1 do
begin
S:=TStringList.Create;
//调试发现下面这行出错:
S.Assign(StringGrid.Cols);
S.Delete(StringGrid.Row);
StringGrid.Cols.Clear;
end;
StringGrid.RowCount:=StringGrid.RowCount-1;
for I:=0 to ColsCount-1 do
begin
StringGrid.Cols.Assign(S);
FreeAndNil(S);
end;
end;
end;
 
DLL初始化时没有修改DLL的APPLICATION,要和程序一样这样才行
 
奇怪了,你的程序在我这里用没问题啊
D6 + WIN2K
 
已经初始化Dll的Application.Handle
为exe的Application.Handle了,并在EXE和DLL中都第一个引用的ShareMem
还是出错
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
后退
顶部