我變得瘋了。我第一次打電話給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
請參閱下面的答案。 –