高手看过来--我的分都给了(5分)

  • 主题发起人 新手101010
  • 开始时间

新手101010

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做程序时出现这样的问题,当前程序出现错误
procedure TForm1.Button1Click(Sender: TObject);
var
dllhand:THandle;
str:TStringList;
stream:Tstringstream;
begin
try
stream:=TStringStream.Create('skdfjs')
//位置1
{如果把该<位置1>的内容放到<位置2>后,并把<位置3>的内容加为注释(因为<位置3>也有错误),则程序不会出错,否则出现“Invalid pointer operation”的错误}
dllHand:=LoadLibrary(pchar('operation.dll'));
str:=TStringList.Create;
if dllhand=0 then
begin
showmessage('Don''t load operation.dll');
exit;
end;
getkind:=GetProcAddress(dllhand,pchar('GetKind'))
//位置2
str:=getkind(DM.DataModule1.ADOT_Pub);
Memo1.Lines.AddStrings(str);
finally
freelibrary(dllhand)
//位置4
Str.Free
//位置3
{在<位置1>中的内容放在正确位置的时候,该位置出现错误,如果它们放到<位置4>的前面则不会}
Stream.Free;
end;
end;
请高手说明一下这是什么原因?
 
在动态连接库中返回对象,不是一个好的方法,
你应该跟踪调试一下,看是那一句出错

我估计是,你的变量引用了一个动态链接库中的对象,
如果,动态链接库被释放了,这个对象也就不存在了,
同时,你的那个对象变量就成了一个悬空的指针了,
对其操作,肯定要出问题的
 

Similar threads

S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
S
回复
0
查看
774
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部