由 由由(love) Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-10 #1 我动态调用DLL文件,使用指针做为参数进行传递,在DLL里对指针有进行赋值操作,因此我用“Var 指针变量”的方式传递,在DLL文件被释放的时候,连指针变量也被释放了,有什么办法可以让指针变量不被释放,因为我在DLL外面还要用到这个指针变量,所以不能释放掉了。
我动态调用DLL文件,使用指针做为参数进行传递,在DLL里对指针有进行赋值操作,因此我用“Var 指针变量”的方式传递,在DLL文件被释放的时候,连指针变量也被释放了,有什么办法可以让指针变量不被释放,因为我在DLL外面还要用到这个指针变量,所以不能释放掉了。
由 由由(love) Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-10 #2 我动态调用DLL文件,使用指针做为参数进行传递,在DLL里对指针有进行赋值操作,因此我用“Var 指针变量”的方式传递,在DLL文件被释放的时候,连指针变量也被释放了,有什么办法可以让指针变量不被释放,因为我在DLL外面还要用到这个指针变量,所以不能释放掉了。
我动态调用DLL文件,使用指针做为参数进行传递,在DLL里对指针有进行赋值操作,因此我用“Var 指针变量”的方式传递,在DLL文件被释放的时候,连指针变量也被释放了,有什么办法可以让指针变量不被释放,因为我在DLL外面还要用到这个指针变量,所以不能释放掉了。
Z zqw0117 Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-10 #3 你不会这个VAR传出的变量得到后,自己用另外一个变量重新保存下? var s,x: string; begin YourProcFromDll(S);//S是VAR传出的 X := S; //或者用拷贝内存方式得到副本 do OtherThing; end;
你不会这个VAR传出的变量得到后,自己用另外一个变量重新保存下? var s,x: string; begin YourProcFromDll(S);//S是VAR传出的 X := S; //或者用拷贝内存方式得到副本 do OtherThing; end;
由 由由(love) Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-10 #4 我所用的指针变量是一个非常复杂的结构,如果再赋值的保存副本的话,那工作量好象太大了点
Z zqw0117 Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-10 #6 那就等你不在使用的时候再释放dll,最好的方法是,当需要的时候加载dll,然后再在程序退出的时候释放它!这样比较合适.不建议一个function里面加载后又释放掉dll,那样纯粹是增加系统负担.
T TrustMe Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-10 #7 要想让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;
要想让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;
由 由由(love) Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-17 #9 自己换了种方式,问题总算解决了! 另外再问一下,谁知道在上海浦东,有没有疯狂英语的培训班啊,在什么地方,要有电话,然后就结贴!
Q qingwen07 Unregistered / Unconfirmed GUEST, unregistred user! 2005-11-17 #10 打114,或者到Google里输入疯狂英语培训班看一下啊!呵呵!