首先,我了解此功能有很多主题,但是我没有发现关于此特定问题的任何信息,如果我重复一下,对不起...

我一直在使用与打印机兼容的C ++程序,我需要获取系统中的打印机列表。

我正在使用EnumPrinters API,但遇到了我不理解的编译错误。

这是我的代码:

#include <iostream>
#include <windows.h>
#include <winspool.h>

using namespace std;
int main()
{
    PRINTER_INFO_5 pi;
    PBYTE buffer[99];
    DWORD bufferSize = 0;
    DWORD bufferNeeded = 0;
    DWORD Entries = 0;

    bool r;

    r = EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 5, NULL, bufferSize, &bufferNeeded, &Entries);

    if (!r)
    { cout << "No printer found" << endl; }
    else { cout << "Found printers" << endl; }
}


当我尝试编译(带有gcc的codeBlocks典型安装)时,出现此错误:

C:\Programação\C++\lab\main.cpp 18 undefined reference to 'EnumPrintersA@28'


我认为这可能是链接器问题,但我不知道如何解决...

谢谢!

解决了!

经过一些帮助后,我发现问题出在我没有导入正确的库。我认为包括标题就足够了。

我需要遵循these steps(使用'winspool'而不是'gdi32')。

顺便说一句,添加“ winspool.lib”并没有解决它。使用“ winspool”代替(不使用“ .lib”)

最佳答案

您的链接器缺少.lib文件。如果您在MSDN文档中查找EnumPrinters,您将看到必须添加的库(在页面底部的位置,在注释之前)。

在这种情况下,它是Winspool.lib。对于gcc,添加commandline选项:-lwinspool

09-16 05:26