我变得疯了。我第一次打电话给DLL
我是初学者,我想做我的第一个DLL。 我已经按照本指南:
http://www.tutorialspoint.com/dll/dll_delphi_example.htm
我想设置有关程序的版本,文本信息和阅读它时,我想,所以它显示通过主应用程序的用户。这只是一个例子,以保持对DLL的信心,我已经知道有很多其他的方式来实现这一点。
现在我想从这样的DLL读取变量 “versione”:
library Clientdll;
uses SysUtils, Classes, Dialogs;
{$R *.res}
function Versione(var messaggio, versione: String):string; export; stdcall;
begin
versione:='Nessun dato ricavato. Valore di chiamata alla DLL errato!';
if messaggio='chiama' then versione:='v4.0.0 build 31';
end;
exports versione;
begin
end.
在主应用程序,我已经写:
[...]
implementation
uses unit2;
{$R *.dfm}
function Versione(var messaggio, versione:string):string; stdcall; external 'Clientdll.dll'
[...]
现在我说 'OK,我只是调用DLL,这一切......'。所以:
procedure TForm1.Button1Click(Sender: TObject);
var x, y:string;
begin
x:='chiama';
Versione(x,y);
showmessage(y);
end;
我可以读V4.0.0在对话框中建立31,但是当我按OK我已经收到此错误:
“无效的指针操作”。
任何想法?
我试过谷歌它,但我的英语很差,一些答案很难理解,也与翻译工具!
如果使用'文件 - >新建 - >其它 - > DLL wizard'到创建你的DLL shell,IDE会插入一个非常重要的注释:“{关于DLL内存管理的重要注意事项:** ShareMem必须是库的USES子句中的第一个单元,并且你的项目(选择Project-View Source)USES子句,如果你的DLL导出任何传递字符串的过程或函数作为参数或函数结果环传递给你的DLL ** ... **为了避免使用BORLNDMM.DLL,使用PChar或ShortString参数传递字符串信息。**}“不要使用** string **参数。 –
你说得对。谢谢!但是现在,当我尝试退出应用程序时收到异常: 运行时错误217在0041470C – Drift89
请参阅下面的答案。 –