尽管非零值,c ++ HANDLE参数变为布尔值false

时间:2013-12-06 06:55:48

标签: c++ parameters

美好的一天。

我在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参数不为零,那么为何在函数调用时将其转换为零?

这个问题似乎与函数调用之外的句柄值有关......但我怎么知道呢?

提前致谢。

1 个答案:

答案 0 :(得分:0)

原来处理错误的原因是getremoteprocaddress调用是在

内部
LRESULT CALLBACK WndProc

在用户驱动的事件中(单击菜单)。

无法弄清楚 - 发生了这种情况,但在我移动了FARPROC varprocaddress = GetRemoteProcAddress ...之后 调用一个新函数,并在菜单点击事件中放置新函数调用,全局句柄值很好地传递到getremoteprocaddress!