我有这个功能:
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指令。 我需要帮助
答案 0 :(得分:5)
showmessage('Test message 2');
此消息未显示。这意味着永远不会达到此代码。唯一合理的结论是
mainfn();
被调用但永远不会返回。也就是说,执行会下降到DLL中,但永远不会返回给调用者。
您的问题的答案可以在您的DLL中找到。