我只是学习用C ++编写Windows程序,并使用Dev-C ++ IDE。 我试图编译的第一个程序是以下MSDN站点的示例:
#ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) { // Register the window class. const wchar_t CLASS_NAME[] = L"Sample Window Class"; WNDCLASS wc = { }; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L"Learn to Program Windows", // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL) { return 0; } ShowWindow(hwnd, nCmdShow); // Run the message loop. MSG msg = { }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1)); EndPaint(hwnd, &ps); } return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam); }
但是,当我尝试编译它,我得到以下错误:
C:\ Dev-Cpp \ lib / libmingw32.a(main.o)(.text + 0x106):main.c:对'WinMain @ 16'的未定义引用
它看起来像mingw
运行时没有正确配置为Unicode支持,因为你已经提供了Unicode wWinMain
,它正在寻找ANSI版本。
你可以切换到Unicode中立的编程(定义_tWinMain
和使用LPTSTR
而不是LPWSTR
,也_T("string")
而不是L"string"
)。
要做到这一点,您还必须#include <tchar.h>
。
对于MinGW的旧版本,您可以使用包装器。
对于MinGW的新版本,您应该使用-municode
选项。
有关详情,请参阅:
你写了int“WINAPI wWinMain”。 删除额外的w。 它应该是“WINAPI WinMain”