我正在编写代码来检查是否安装了我的虚拟打印机,为此我使用 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(),例如调用堆栈管理不善。

10-08 04:58