我正在尝试使用Windows SDK命令提示符编译一个简单的C Windows API程序。
这是程序的摘录:
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
[...]
RegisterClass(&wc);
hwnd = CreateWindow("test", NULL, 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
[...]
当我使用以下方式编译它时:
cl test.c
在Windows SDK命令提示符中,出现了许多类似以下的链接器错误:test.obj : error LNK2019: unresolved external symbol __imp_CreateWindowExA referenced in function WinMain
test.obj : error LNK2019: unresolved external symbol __imp_RegisterClassA referenced in function WinMain
#define UNICODE
时,是否需要更改WinMain
?我读到了一些关于这方面的内容,但如果我只是使用WinMain
,编译器不会抱怨。 - AndreKR<tchar.h>
中定义的_tWinMain
。WinMain
是 ANSI 函数的名称;wWinMain
是 Unicode 函数的名称。只要将lpCmdLine
参数声明为LPTSTR
类型(字符串是从 ANSI 到 Unicode 改变的唯一内容,并且通过使用此宏,编译时会自动确定正确的字符串类型),它们就是相同的,这就是为什么编译器不会抱怨的原因。很抱歉这很令人困惑;在低级别上编程 Windows 意味着你必须处理多年的向后兼容性。 - Cody Gray