Delphi和C++的地址WinAPI函数不同时会有所不同

みっつ*_*みっつ 2 delphi winapi getprocaddress delphi-2010

在C++中,如果您尝试获取Windows API函数的函数指针,那么该指针指向您GetProcAddress在该函数的名称上使用的相同地址,并且它是相应的模块.例如:

&MessageBoxA == GetProcAddress("User32.dll", "MessageBoxA");
Run Code Online (Sandbox Code Playgroud)

会的true.但是,在Delphi中,情况并非如此.这段代码:

@MessageBoxA = GetProcAddress('User32.dll', 'MessageBoxA');
Run Code Online (Sandbox Code Playgroud)

不会true,在我的测试中,@MessageBoxA0x0040bd18而等效GetProcAdress返回什么测试的C++同行一样,0x7550fd1e.

所以现在我的问题:为什么?

Ser*_*yuz 6

与量0x004 ..地址是导入的API函数(在声明的地址windows.pasMessageBoxA),才能在静态加载,因此它当然将驻留在可执行映像(具有默认的0x00400000的基地址)英寸 调用的实际函数是在加载到该函数的内存中的库的图像中.您可以使用该函数获取库的图像库GetModuleHandle.在你的情况下,它可能是0x75的东西...使用C++测试,你可能正在链接运行时库,所以无论如何动态加载该函数.