美好的一天。
我在2012年的visual studio express中遇到的一个问题让我不知所措
我有以下代码:
HANDLE hProc = INVALID_HANDLE_VALUE ; <= declared globally in cpp file
//my routine
//get myprocessid
//...
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, myprocessid);
并且hProc的值不为零。
然后在另一个例程中:
FARPROC varprocaddress = GetRemoteProcAddress (hProc, hModule, MethodName, 0, FALSE);
问题是,当我调试GetRemoteProcAddress例程时, hProc值(在hProcess变量中)是FALSE,尽管我可以清楚地看到它由于变量监视而被传递为非假,因此例程明显失败。
getremoteprocaddress方法声明为:
FARPROC WINAPI GetRemoteProcAddress (HANDLE hProcess, HMODULE hModule, LPCSTR lpProcName, UINT Ordinal, BOOL UseOrdinal)
有人可以帮忙吗? 很明显,hProc参数不为零,那么为何在函数调用时将其转换为零?
这个问题似乎与函数调用之外的句柄值有关......但我怎么知道呢?
提前致谢。
答案 0 :(得分:0)
原来处理错误的原因是getremoteprocaddress调用是在
内部LRESULT CALLBACK WndProc
在用户驱动的事件中(单击菜单)。
无法弄清楚 - 发生了这种情况,但在我移动了FARPROC varprocaddress = GetRemoteProcAddress ...
之后
调用一个新函数,并在菜单点击事件中放置新函数调用,全局句柄值很好地传递到getremoteprocaddress!