我有一个用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运行时没有发生任何事情。它没有显示任何错误,也没有显示应用程序主窗体...
我该如何解决这个问题?!
答案 0 :(得分:4)
System32是64位系统文件夹。您的应用程序是一个32位应用程序,因此不会在System32中搜索DLL。它将在SysWOW64中搜索,这是32位系统文件夹。如果您在没有调试的情况下运行程序,您将看到一条错误消息,告诉您无法找到DLL。
现在,您永远不应该修改系统文件夹的内容。从System32中删除DLL,而不是将其放在与可执行文件相同的目录中。
给出显示的代码,另一个问题是导出的DLL函数使用register
调用约定,但是使用stdcall
调用约定导入它。您必须确保DLL和EXE使用的调用约定相互匹配。