gpt4 book ai didi

delphi - Delphi 和 C++ WinAPI 函数的地址在不应该不同的情况下不同

转载 作者:行者123 更新时间:2023-12-03 11:05:45 26 4
gpt4 key购买 nike

在 C++ 中,如果您尝试获取 Windows API 函数的函数指针,则该指针指向的地址与您在该函数名称上使用 GetProcAddress 时获得的地址相同,并且它各自模块。例如:

&MessageBoxA == GetProcAddress("User32.dll", "MessageBoxA");

将为true。然而,在Delphi中,情况并非如此。这段代码:

@MessageBoxA = GetProcAddress('User32.dll', 'MessageBoxA');

不会true,在我的测试中,@MessageBoxA0x0040bd18,而等效的 >GetProcAdress 返回测试的 C++ 对应部分执行的操作,0x7550fd1e

现在我的问题是:为什么?

最佳答案

带有 0x004.. 的地址是导入的 api 函数的声明地址(在 windows.pas 中的 MessageBoxA 中),使其具有 statically loaded ,因此它当然会驻留在可执行镜像中(默认情况下其基地址为 0x00400000)。实际调用的函数位于加载到该函数所在内存的库镜像中。您可以使用 GetModuleHandle 获取库的镜像库。在您的情况下,它可能是 0x75 的内容...通过 C++ 测试,您可能会链接到运行时库,因此该函数无论如何都会动态加载。

关于delphi - Delphi 和 C++ WinAPI 函数的地址在不应该不同的情况下不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com