应用程序在delphi中调用.dll崩溃

时间:2018-03-29 05:54:46

标签: delphi dll

我有一个用Delphi xe10.2创建的DLL,它包含一个函数

function calc(b : integer;a:integer) : Integer;
begin
  Result := a+b;
end;

我会在其他程序上调用它

function calc(b : integer;a:integer): Integer; stdcall; external 'my.dll';

我将DLL复制到System32文件夹和应用程序.exe文件夹

procedure TForm1.Button1Click(Sender: TObject);
begin
 showmessage(inttostr(calc(2,3)));
end;

但是当我从delphi IDE运行时没有发生任何事情。它没有显示任何错误,也没有显示应用程序主窗体...

我该如何解决这个问题?!

1 个答案:

答案 0 :(得分:4)

System32是64位系统文件夹。您的应用程序是一个32位应用程序,因此不会在System32中搜索DLL。它将在SysWOW64中搜索,这是32位系统文件夹。如果您在没有调试的情况下运行程序,您将看到一条错误消息,告诉您无法找到DLL。

现在,您永远不应该修改系统文件夹的内容。从System32中删除DLL,而不是将其放在与可执行文件相同的目录中。

给出显示的代码,另一个问题是导出的DLL函数使用register调用约定,但是使用stdcall调用约定导入它。您必须确保DLL和EXE使用的调用约定相互匹配。