Delphi7 dll 动态调用的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi7 dll 动态调用的问题相关的知识,希望对你有一定的参考价值。
procedure TForm1.Button1Click(Sender: TObject);
var
OneHandle: THandle;//定义一个句柄变量
pt:function(msg:String):String;
begin
OneHandle := LoadLibrary('PENNIESLIB.dll');
try
if OneHandle <> 0 then
@pt := GetProcAddress(OneHandle, 'PenniesToCoins');//@符号 不懂
if not (@pt = nil) then
Edit1.Text := pt('aaaa') //地址错误哎。。。
else
RaiseLastOSError
finally
FreeLibrary(OneHandle);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
OneHandle: THandle;//定义一个句柄变量
pt:function(msg:String):String;
begin
OneHandle := LoadLibrary('PENNIESLIB.dll');
try
if OneHandle <> 0 then
@pt := GetProcAddress(OneHandle, 'PenniesToCoins');//@符号 不懂
if not (@pt = nil) then
Edit1.Text := pt('aaaa') //地址错误哎。。。
else
RaiseLastOSError
finally
FreeLibrary(OneHandle);
end;
end;
问题应该出在你这个函数的定义上,你仔细看看你dll工程文件上面的一段英文,
如果要用string类型做参数传递的话,需要引用ShareMem单元,
在调用的工程文件里也最好加个ShareMem单元。否则会造成内存泄漏的。
或者把string类型改成pchar也ok。这是做dll文件时需要注意的哦
希望能帮助到你。 我把这段话也搞上来吧:
Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. 参考技术A 打开delphi7,然后file-new-other,在打开的new items界面选dll wizard点OK.鄙人业余学习delphi,不知是怎么回事。请高人来解答! 你不是编译吧!追问
我的 DLL已经写好了。。。 静态调用没问题 动态调用 报内存错误
参考技术B 贴出的你dll代码看看, 或者发给我帮你调一下!sy0051@sina.com 参考技术C 那可能是dll有问题啊
Delphi DLL文件的动态调用
樊伟胜
以上是关于Delphi7 dll 动态调用的问题的主要内容,如果未能解决你的问题,请参考以下文章