delphi – 为什么@运算符返回的地址与GetProcAddress函数返回的地址不同

前端之家收集整理的这篇文章主要介绍了delphi – 为什么@运算符返回的地址与GetProcAddress函数返回的地址不同前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要获取Win APi方法的地址( FindWindowW),我正在使用@运算符和 GetProcAddress,但两者都返回不同的结果.
var
  p1,p2 : Pointer;
begin
  p1:= @Winapi.Windows.FindWindowW;
  p2:=GetProcAddress(GetModuleHandle('user32.dll'),'FindWindowW');
  ShowMessage(Format('p1 %p p2 %p ',[p1,p2]));
end;

为什么返回的值不同?

解决方法

因为静态链接使用thunk跳转表来调用DLL函数.

你的例子中的p2是进程中FindWindowW函数的正确地址,而p1是这样的跳转指令的地址

jmp dword ptr [SomeAddress]

其中SomeAddress指向FindWindowW函数的实际地址.

原文链接:https://www.f2er.com/delphi/102401.html

猜你在找的Delphi相关文章