为什么我在 Windows API 中得到对 TextOut() 函数的未定义引用?

Why do I get undefined reference to TextOut() function in Windows API?

本文关键字:函数 未定义 引用 TextOut Windows API 为什么      更新时间:2023-10-16

这是我所有的代码:

#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
LRESULT CALLBACK WNDProc(HWND hwnd, UINT uMSG, WPARAM wparam, LPARAM lparam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR args, int ncmdshow) {
WNDCLASSEX wincls;
HWND first;
UINT last;
wincls.lpfnWndProc = WNDProc;
wincls.hInstance = hInstance;
wincls.lpszClassName = _T("ISSA_CLASS");
wincls.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
if (!RegisterClassEx(&wincls)) {
MessageBox(first, _T("Register failed"), _T("Yeah baby"), last);
return 1;
} 
TCHAR szwincls[] = _T("win32app");
TCHAR title[] = _T("Neptune's Limit");
HWND hwnd = CreateWindow(szwincls, title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 200, NULL, NULL, hInstance, NULL); 
if (!hwnd) {
MessageBox(first, _T("Register failed"), _T("Yeah baby"), last);
return 1;
}
ShowWindow(hwnd, ncmdshow);
UpdateWindow(hwnd);
MSG message;
while (GetMessage(&message, NULL, 0, 0)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
return (int) message.wParam;
}
LRESULT CALLBACK WNDProc(HWND hwnd, UINT uMSG, WPARAM wParam, LPARAM lParam)  
{  
PAINTSTRUCT ps;  
HDC hdc;  
TCHAR greeting[] = _T("Hello, World!");  
switch(uMSG) {
case WM_PAINT:    
hdc = BeginPaint(hwnd, &ps);  
TextOut(hdc, 5, 5, greeting, _tcslen(greeting));   
EndPaint(hwnd, &ps);  
break;
case WM_DESTROY: 
PostQuitMessage(0);  
break;  
default:  
return DefWindowProc(hwnd, uMSG, wParam, lParam);  
break;   
}
return 0;  
}

在命令提示符下运行时,这会生成"对TextOut@20的未定义引用"。我知道有人问过类似的问题,我确实阅读了答案,但我不明白为什么我必须链接 gdi 库。这段代码几乎直接来自MSDN,他们使用TextOut((,它就像一个魅力。另外,我正在尝试为这个项目使用尽可能少的外部资源。我实际上是在 Windows 记事本中对此进行编码,并在命令提示符下将其编译为可执行文件。为什么 TextOut(( 不应该在这个代码中工作?看起来语法是正确的,但我应该知道什么?我只是在学习这些东西。

但我不明白为什么我必须链接 gdi 库。

因为文档是这样说的:

文本输出(( 函数

要求

[...]

图书馆: gdi32.lib