在调用DLL函数后,为什么不控制传递给下一条指令?

时间:2015-10-31 21:42:49

标签: delphi dll

我有这个功能:

procedure call_dll(path:string);
var
  lib: HMODULE;
  mainfn: procedure(); stdcall;
begin
if FileExists(path) then
 begin
 lib := LoadLibrary(PAnsiChar(path));
 Win32Check(lib <> 0);
 try
   @mainfn := GetProcAddress(lib, 'main');
   Win32Check(Assigned(mainfn));
   mainfn();
 finally
   FreeLibrary(lib);
 end;
 end;
end;

这是一个调用DLL并调用名为main()的函数的函数,它工作正常,但在完成执行main()函数后,该过程仍在工作并使用处理器中的13.4%。

这是我称之为

的时候
showmessage('Test message 1');
call_dll('Test.dll');
showmessage('Test message 2');

执行后,我看到消息“测试消息1”,然后是来自DLL函数的消息,但它仍然存在,并且没有传递给第三个showmessage指令。 我需要帮助

1 个答案:

答案 0 :(得分:5)

showmessage('Test message 2');

此消息未显示。这意味着永远不会达到此代码。唯一合理的结论是

mainfn();

被调用但永远不会返回。也就是说,执行会下降到DLL中,但永远不会返回给调用者。

您的问题的答案可以在您的DLL中找到。