我正在编写代码来检查是否安装了我的虚拟打印机,为此我使用 EnumMonitors winapi,代码编译,但是当我尝试运行我的程序时,它崩溃了。
调试我的程序时,我在这一行出现了段错误错误:EnumMonitors(NULL, 0, (LPBYTE)buffer, sizeof(buffer), &capacity, &returned);
在 .pro 文件中,我添加了 LIBS += "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\WinSpool.Lib"
我该怎么做才能使 EnumMonitors WinAPI 工作?
我的代码:
#include <windows.h>
#include <winspool.h>
void Enum()
{
char buffer[4096];
DWORD capacity;
DWORD returned;
QString monitorname = "Redirected Port";
/*Program crashes here*/ EnumMonitors(NULL, 1, (LPBYTE)buffer, sizeof(buffer), &capacity, &returned);
MONITOR_INFO_1 *mi = (MONITOR_INFO_1*)buffer;
for (uint i = 0; i < returned; i++)
{
if (QString::fromWCharArray(mi[i].pName) == monitorname)
{
//Do something
}
}
}
编辑:我已将代码从 0 更新为 1 作为第二个参数
最佳答案
你用的是哪个编译器?当我在 C++Builder 中按原样尝试您的代码时,EnumMonitors()
不会崩溃并按预期返回 ERROR_INVALID_LEVEL
错误。这让我觉得你的编译器可能没有正确声明 EnumMonitors()
,例如调用堆栈管理不善。