从命令行编译 C 程序时出现 LNK2019 错误

问题描述 投票:0回答:1

我正在研究一个问题并遇到了这个问题: 将 SetPixel 坐标转换为控制台上的像素

这是代码:

#include <stdio.h>
#include <windows.h>

int main()
{

    HWND myconsole = GetConsoleWindow();
    HDC mydc = GetDC(myconsole);
    RECT rect;
    GetClientRect(myconsole, &rect);
    for(int i = 0; i < rect.bottom - rect.top; ++i)
        SetPixel(mydc, (rect.right - rect.left) / 2, i, RGB(255, 0, 0));
    for(int i = 0; i < rect.right - rect.left; ++i)
        SetPixel(mydc, i, (rect.bottom - rect.top) / 2, RGB(255, 0, 0));
}

它在 Visual Studio 中编译并运行,但从命令行(cl test.c)我收到以下错误:

error LNK2019: unresolved external symbol __imp__SetPixel@16 referenced in function _main
error LNK2019: unresolved external symbol __imp__GetDC@4 referenced in function _main
error LNK2019: unresolved external symbol __imp__GetClientRect@8 referenced in function _main
[cl] 
c lnk2019 cl
1个回答
0
投票

我在 Visual Studio 中也遇到了相同代码的失败链接,直到我通过定义 _WIN32_WINNT 0x0502 通知 Visual Studio 我的目标操作系统至少是 Windows Server 2003。这是因为其中一些 API(例如

GetConsoleWindow
)直到“XXX”Windows 版本才可用。

这里

是有关_WIN32_WINNT定义的更多信息,如果您感兴趣的话。

这将在我的控制台窗口上绘制十字准线,如广告所示。我几分钟前编译并测试过:

/* Targeting Windows Server 2003 & later: */ #define _WIN32_WINNT 0x0502 /* Be sure to #define BEFORE you #include windows.h */ #include <windows.h> int graphics_test() { HWND myconsole = GetConsoleWindow(); HDC mydc = GetDC(myconsole); RECT rect; int i; GetClientRect(myconsole, &rect); for(i = 0; i < rect.bottom - rect.top; ++i) SetPixel(mydc, (rect.right - rect.left) / 2, i, RGB(255, 0, 0)); for(i = 0; i < rect.right - rect.left; ++i) SetPixel(mydc, i, (rect.bottom - rect.top) / 2, RGB(255, 0, 0)); return 0; }

© www.soinside.com 2019 - 2024. All rights reserved.