频道分类

delphi 调用dll运行正常,退出时弹出错误解决办法

作者:admin 来源: 日期:2020/2/27 8:47:27 人气: 标签:

 

分析原因:Dll中函数返回值最好不要使用string类型,而采用PChar类型。因为string类型是系统自动分配内存空间,而PChar则是用户根据需求而进行分配的。

解决办法:得出结论了:ShareMem 应加在Dll和主程序的project文件中,而且必须紧接在uses后的第一个位置引用,这是最关键的。

 

例如主程序:

program Project1;

 

uses

  ShareMem, //关键位置 必须紧接在uses后的第一个位置引用

  Vcl.Forms,

  Unit1 in 'Unit1.pas' {Form1},

  Vcl.Themes,

  Vcl.Styles;

 

{$R *.res}

 

begin

  Application.Initialize;

  Application.MainFormOnTaskbar := True;

  Application.Title := '';

  TStyleManager.TrySetStyle('Luna');

  Application.CreateForm(TForm1, Form1);

  Application.CreateForm(TForm20, Form20);

  Application.Run;

end.

 

dll文件:

library Key;

uses

  ShareMem, //关键地方

  System.SysUtils,

  System.Classes;

 

{$R *.res}

 

function GetExeMD5_1:STRING;stdcall;

begin

  Result :='';

end;

 

function GetExeMD5_2:STRING;stdcall;

begin

 Result :='';

end;

 

exports

    GetExeMD5_1,GetExeMD5_2;

begin

end.

 

实际我们用IDE创建DLL文件已经有英文提示,只是没有在意。

百度翻译:

关于DLL内存管理的重要说明:ShareMem必须是

库的USES子句和项目的第一个单元(选择

如果DLL导出任何过程或

将字符串作为参数或函数结果传递的函数。这个

应用于所有传递到或从DLL传递的字符串--甚至那些

嵌套在记录和类中。ShareMem是

BORLNDMM.DLL共享内存管理器,它必须与

用你的DLL。要避免使用BORLNDMM.DLL,请传递字符串信息

使用PChar或ShortString参数。


上一篇:delphi 实现数据库连接封装到dll下一篇:没有资料