delphi转成 bcb 出錯,大家帮忙一下。 - C++ Builder / Windows SDK/API
原delphi的代码:
...
InstallHook: function (MainHandle: HWND):Boolean; stdcall;
...
procedure TfrmCannotKill.btn1Click(Sender: TObject);
var
ModuleHandle: THandle;
begin
ModuleHandle := LoadLibrary('Hook.dll');
if ModuleHandle = 0 then Exit;
@InstallHook := GetProcAddress(ModuleHandle, 'InstallHook');
if InstallHook(0) then
begin
btn1.Enabled := False;
ShowMessage('安装HOOK成功,现在任务管理器已经关不掉我了.');
end;
end;
我改成bcb的。
在.h文件里加上了
typedef int(__stdcall *INSTALLHOOK)(HWND MainHandle);
按钮代码:
HINSTANCE ModuleHandle;
INSTALLHOOK InstallHook;
ModuleHandle = LoadLibrary("Hook.dll");
if(ModuleHandle == 0) return;
InstallHook = (INSTALLHOOK)GetProcAddress(ModuleHandle, "InstallHook");
if(InstallHook(0))
{
Button1->Enabled = False;
ShowMessage("安装HOOK成功,现在任务管理器已经关不掉我了.");
}
delphi重新编译之后,调用dll,是禁止被任务管理器终止的。
但是bcb的确不能被禁止。
我哪里搞错了?
谢谢各位!
[解决办法]
加断点,判断ModuleHandle和InstallHook是否为NULL
[解决办法]
刚才我不是说了吗?加断点,依次查看:ModuleHandle是否为NULL,InstallHook是否为NULL,另外就是:InstallHook的返回值,和Delphi调用时的返回值是否一样?