调用 GetPointerFrameTouchInfo时出现错误 998(对内存位置的无效访问)
Error 998 (Invalid access to memory location) for when calling GetPointerFrameTouchInfo
我正在尝试调用GetPointerFrameTouchInfo
函数以获取指针计数,但该函数似乎失败了
错误 998(对内存位置的访问无效)。
知道为什么会发生这种情况以及我该如何解决它吗?
我正在尝试在钩子过程中调用相同的GetMsgProc
如下所述:
LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMSG lpMsg = (LPMSG)lParam;
UINT32 pointerId = GET_POINTERID_WPARAM(lpMsg->wParam);
switch (lpMsg->message)
{
case WM_POINTERUPDATE:
UINT32 *pointerCount;
POINTER_TOUCH_INFO *pointerTouchInfo;
TCHAR outputLogTouchTst[100];
if (GetPointerFrameTouchInfo(pointerId, pointerCount, pointerTouchInfo) == 0)
{
_stprintf(outputLogTouchTst, _T("Hook: The error code for proc is %d"), GetLastError());
OutputDebugString(outputLogTouchTst);
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
_stprintf(outputLogTouchTst, _T("Hook: The count of pointers is %d"), pointerCount);
OutputDebugString(outputLogTouchTst);
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
return CallNextHookEx(getmsghook, nCode, wParam, lParam);
}
您声明指针变量,但从不将它们设置为指向任何内容。您应该只声明普通变量,并将地址传递给函数。
constexpr maxpointers = 32;
UINT32 pointerCount = maxpointers;
POINTER_TOUCH_INFO pointerTouchInfo[maxpointers];
if (GetPointerFrameTouchInfo(pointerId, &pointerCount, pointerTouchInfo) == 0)
没有必要使用&
来表示pointerTouchInfo
;因为它是一个数组,当用作函数参数时,它会自动衰减到指针。
相关文章:
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 内存所有位置 wxWidgets
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 内存中类位置的成员是否取决于类成员在类定义中的位置?
- 向量的内存位置不连续
- 如何根据C++在同一内存位置重新初始化 C# 中的对象(还是自动完成)?
- 常量引用的内存位置
- C++强制变量到一个固定的内存位置
- 为什么未初始化的内存位置的值给出 -842150451 的值?
- 为什么存储在内存位置的值会发生变化?
- 在特定内存位置构造 c++ 对象
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 如何识别内存泄漏的位置
- 内存位置出现Microsoft C++异常:std::out_of_range
- 函数,返回变量c++占用的内存位置的大小
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- delete如何知道对象在内存中的起始位置
- 无法在 Opencv 中显示图像导致内存位置
- 如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"