(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 条评论
登录 后参与评论

相关文章

未定义对'WinMain @ 16'的引用(C ++)

C ++代码块错误:对SDL_PollEvent和WinMain @ 16的未定义引用

未定义对WinMain @ 16 C ++,SDL-2的引用

对WinMain @ 16的未定义引用(代码块)

对WinMain的未定义引用(C ++ Mingw)

代码块中的错误消息:对“ WinMain @ 16”的未定义引用

G ++对`WinMain'的未定义引用(无IDE)

调用Win32 API函数时的未定义引用

VS代码未定义_WIN32

Windows API编程,使用c:对OpenJobObject的未定义引用

未定义引用'WinMain @ 16'minGW32-make错误

在C中使用C ++代码的arm-none-eabi-gcc:未定义的引用

Win32 API 中的 WinMain() 在哪里实现?

如果未链接任何使用代码,则对g ++中的静态const成员的未定义引用

使用C ++ Win32 API启用视觉样式吗?

我的代码中的C ++未定义引用错误?

无法编译C ++代码-“未定义的引用-”

从go代码调用时对c函数的未定义引用

代码块和C对getline的未定义引用

编译时SIFT代码(C ++)中的未定义引用

使用混合C和C ++的函数的未定义引用

代码返回“未定义”

Tensorflow c++ api 对`tflite::DefaultErrorReporter()'的未定义引用

g_cond_wait()的此示例代码是否会导致未定义的行为?

在C中使用sqrtf():“对`sqrtf'的未定义引用”

C-即使使用“ -lm”,也未定义对“ sqrt”的引用

使用命名空间C ++的未定义引用

在C ++中使用库时出现“未定义的引用”

在 vs 代码中使用 win32 API