(C ++)使用g ++返回“对WinMain @ 16的未定义引用”的Win32 API示例代码

灰火

我将G ++编译器与notepad ++一起使用。

我正在按Windows跟随一个教程,我使用的代码是Windows教程中的示例代码(https://docs.microsoft.com/zh-cn/windows/win32/learnwin32/your-first-windows-program)我将其粘贴到记事本中并尝试对其进行编译,但是收到一条错误消息。

这是代码和消息:

#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);
}

这是我用来编译的命令(powershell)

PS  g++ main.cpp

这是我在尝试编译时收到的消息(PowerShell)

c:/ mingw / bin /../ lib / gcc / mingw32 / 6.3.0 /../../../ libmingw32.a(main.o):(。text.startup + 0xa0):未定义引用`WinMain @ 16'collect2.exe:错误:ld返回1退出状态

如果我试图重新命名wWinMain,以WinMain它给人的错误

main.cpp:9:12:错误:C函数的声明'int WinMain(HINSTANCE,HINSTANCE,PWSTR,int)'int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,PWSTR pCmdLine,int nCmdShow)
从c:\ mingw \ include \ windows.h:44:0,来自main.cpp:5:c:\ mingw \ include \ winbase.h:1263:14:注意:以前的声明'int WinMain(HINSTANCE,HINSTANCE,LPSTR,int) 'int APIENTRY WinMain(HINSTANCE,HINSTANCE,LPSTR,int);

如果我尝试使用该命令,g++ main.cpp -municode则会收到消息

g ++。exe:错误:无法识别的命令行选项“ -municode”

灰火

在行中

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)

我更改wWinMain为,WinMain 然后更改PWSTRLPSTR,现在可以使用了。我不知道为什么。希望它对遇到相同问题的人有所帮助(-:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档