所以,我试图从Delphi XE2中的DLL调用一个过程.但程序不会分配.
我试过在互联网上找到几个例子.正在按预期加载DLL.导出正确写入.
一切似乎都很好,但仍然没有成功.
怎么了?
我的代码如下
type TStarter = procedure; stdcall; ... fTheHookStart: TStarter; ... procedure TForm1.LoadHookDLL; begin LogLn('Keyboard Hook: Loading...'); // Load the library DLLHandle := LoadLibrary('thehookdll.DLL'); // If succesful ... if Handle <> 0 then begin LogLn('Keyboard Hook: DLL load OK!'); LogLn('Keyboard Hook: assigning procedure ...'); fTheHookStart := TStarter(GetProcAddress(DLLHandle, 'StartTheHook')); if @fTheHookStart <> nil then begin LogLn('Keyboard Hook: procedure assignment OK!'); LogLn('Keyboard Hook: Starting...'); fTheHookStart; end else begin LogLn('Keyboard Hook: procedure assignment FAIL!'); FreeLibrary(DLLHandle); if Handle <> 0 then LogLn('Keyboard Hook: DLL free OK!') else LogLn('Keyboard Hook: DLL free FAIL!'); end; end else begin LogLn('Keyboard Hook: DLL load FAIL!'); end; end;
Tom Brunberg.. 6
一个错误是你在加载dll时分配DllHandle,但是你检查Handle <>是否为nil.句柄实际上是你的表单句柄,其中的句子不是零.如果加载成功则无关紧要,但如果失败,则会出现错误的日志记录.由于您还有一些日志功能,日志显示什么?