如何传递指针并将指针返回dwData
中的EnumDisplayMonitors
?
#include <Windows.h>
#include <stdio.h>
BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
dwData = ((LPARAM)&hMonitor);
return true;
}
void main()
{
TCHAR* monitorHandle[100];
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, (LPARAM)(&monitorHandle));
}
答案 0 :(得分:2)
您需要将dwData
参数强制转换为其预期的指针类型,然后取消引用它以分配给它,如下所示。
#include <Windows.h>
#include <stdio.h>
BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
*reinterpret_cast<HMONITOR*>(dwData) = hMonitor;
return true;
}
int main()
{
HMONITOR monitorHandle = NULL;
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, reinterpret_cast<LPARAM>(&monitorHandle));
printf("%p", monitorHandle);
return 0;
}
在main中,我们传递一个指向HMONITOR
(也就是monitorHandle
的地址)的指针。然后在回调中,我们将dwData
参数转换回HMONITOR
指针。我们取消引用它以分配给它,然后将其打印在main中以检查它是否已正确分配或是否仍然是NULL
。
顺便说一句,main总是返回一个整数!