我是delphi noob,所以请帮我解决这个问题。我用以下代码创建了一个DLL:
library PRdll;
uses
ExceptionLog, SysUtils,Classes,Dialogs;
{$R *.res}
function DllMessage(var a:integer):Integer;stdcall;export;
begin
Showmessage('GHelloa');//this is displayed
ShowMessage(IntToStr(a));//I get the error at this point
Result:=5;
end;
exports DllMessage;
begin
end.
此代码给出了对DLL的相应调用:
var
FDll: TFDll;
function DllMessage(var a:integer):integer;stdcall;external 'PRDll.dll';
implementation
{$R *.dfm}
procedure TFDll.btnCallDllClick(Sender: TObject);
var
i:integer;
s1:string;
begin
i:=5;
s1:=IntToStr(DllMessage(i));
//ShowMessage(s1);
end;
我收到了访问错误。为什么会这样呢?你好吗?救命!!! 在此先感谢
答案 0 :(得分:2)
您是否添加了 sharemem 单位?
请参阅帮助。
第二个选项:注释ExceptionLog行,然后重试。
它工作正常。
问候。
答案 1 :(得分:0)
下面发布了正确的代码;我很惊讶为什么没有人能告诉我这个简单的事情
//Dll
library ProDll;
uses
ExceptionLog,
SysUtils,
Classes,Dialogs;
function showSqRoot(var a:Double):Double; stdcall; export;
begin
Result:=sqrt(a);
end;
exports showSqRoot;
{$R *.res}
begin
end.
//The program
function showSqRoot(var a:Double):Double;stdcall external 'ProDll.dll'//Notice 'stdcall external' here
procedure TFcallDLL.btnCallDLLClick(Sender: TObject);
var
numInput,numRes:Double; {Input and Result}
begin
numInput:=StrToFloat(edtInput.Text);
numRes:=showSqRoot(numInput); {call the function in DLL with the Parameter}
edtResult.Text:=FloatToStr(numRes); {Display the Result}
end;
这段代码对我来说很好。