关于DLL调用时使用指针参数的问题! ( 积分: 50 )

  • 主题发起人 主题发起人 由由(love)
  • 开始时间 开始时间

由由(love)

Unregistered / Unconfirmed
GUEST, unregistred user!
我动态调用DLL文件,使用指针做为参数进行传递,在DLL里对指针有进行赋值操作,因此我用“Var 指针变量”的方式传递,在DLL文件被释放的时候,连指针变量也被释放了,有什么办法可以让指针变量不被释放,因为我在DLL外面还要用到这个指针变量,所以不能释放掉了。
 
我动态调用DLL文件,使用指针做为参数进行传递,在DLL里对指针有进行赋值操作,因此我用“Var 指针变量”的方式传递,在DLL文件被释放的时候,连指针变量也被释放了,有什么办法可以让指针变量不被释放,因为我在DLL外面还要用到这个指针变量,所以不能释放掉了。
 
你不会这个VAR传出的变量得到后,自己用另外一个变量重新保存下?
var
s,x: string;
begin
YourProcFromDll(S);//S是VAR传出的
X := S;
//或者用拷贝内存方式得到副本
do
OtherThing;
end;
 
我所用的指针变量是一个非常复杂的结构,如果再赋值的保存副本的话,那工作量好象太大了点
 
用MXL吧。
 
那就等你不在使用的时候再释放dll,最好的方法是,当需要的时候加载dll,然后再在程序退出的时候释放它!这样比较合适.不建议一个function里面加载后又释放掉dll,那样纯粹是增加系统负担.
 
要想让DLL不释放你需要的资源,有个办法,我常用的
type
PMyRecord = ^TMyRecord;
TMyRecord = packed record
i: integer;
name: array[0..999]of Char;
r:do
uble;
end;
// DLL内部
procedure GetData(pData: PMyRecord);
begin
pData^.i:= 3;
lstrcpy(@pData^.Name[0],'TrustMe');
pData^.r:= pi;
end;

// DLL外部调用
var
rec: TMyRcord;
begin
ZeroMemory(@rec, SizeOf(Rec));
GetData(@rec);
// rec中的内容不会随着DLL的释放而释放
end;
 
通常的做法是由主调程序负责给指针分配和释放空间
 
自己换了种方式,问题总算解决了!
另外再问一下,谁知道在上海浦东,有没有疯狂英语的培训班啊,在什么地方,要有电话,然后就结贴!
 
打114,或者到Google里输入疯狂英语培训班看一下啊!呵呵!
 
后退
顶部