【问题标题】:Linker issue with EnumPrinters SampleEnumPrinters 示例的链接器问题
【发布时间】:2015-08-20 13:39:35
【问题描述】:

首先,我知道有很多关于这个功能的话题,但是我没有找到任何关于这个特定问题的信息,如果我重复的话,对不起......

我一直在用 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; }
}

当我尝试编译(codeBlocks 典型安装 w/gcc)时,我收到此错误:

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

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

谢谢!

解决了!

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

我需要关注these steps(使用“winspool”而不是“gdi32”)。

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

【问题讨论】:

标签: c++ windows gcc linker


【解决方案1】:

您的链接器缺少.lib 文件。如果您在 MSDN 文档中查找 EnumPrinters,您将看到您必须添加哪个库(在页面底部的某处,就在 cmets 之前)。

在本例中为Winspool.lib。对于 gcc,添加 commandline 选项:-lwinspool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2020-02-19
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多