当我使用函数名称为“MessageBoxA”的 Visual Studio Code 运行此代码时,它确实有效,并且为我提供了指向该函数的指针。但是,当我将函数名称更改为“MessageBoxATEST”并保存时,它仍然为我提供相同的函数地址。这怎么可能(因为user32.dll中不存在这个函数)。例如,当我将 DLL 的名称更改为
User32TEST.dll
时,它会给出错误 Function not loaded ....
,这是应该的。
有人可以帮忙吗?
#include <windows.h>
#include <stdio.h>
typedef BOOL(*func_pointer)(LPSTR, LPCSTR);
int main () {
HMODULE Handle_DLL = LoadLibrary("User32.dll");
func_pointer Pointer = (func_pointer)(Handle_DLL,"MessageBoxATEST");
if (Handle_DLL == NULL || Pointer == NULL){
DWORD error = GetLastError();
printf("Function not loaded into memory %d\n", error);
return 1;
}
else{
printf("Function address: %p\n", (void*)Pointer);
FreeLibrary(Handle_DLL);
return 0;
}}
使用函数名称
它确实有效,并且它为我提供了指向该函数的指针
"MessageBoxA"
不,不是。
当我将函数名称更改为例如
并保存时,它仍然为我提供相同的函数地址
"MessageBoxATEST"
它从来都不是函数地址。
您忘记实际打电话
GetProcAddress
。您现在拥有的是(在考虑逗号运算符的行为之后)(func_pointer)"MessageBoxATest"
,这显然不是 NULL 指针。