当前位置: 首页 > 知识库问答 >
问题:

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

艾令雪
2023-03-14
#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);
}
PS  g++ main.cpp

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

如果尝试将wwinmain重命名为wwinmain,则会出现错误

main.cpp:9:12:错误:C:\mingw\include\windows.h:44:0,from main.cpp:5:C:\mingw\include\winbase.h:1263:14中包含的文件中的C函数'int WinMain(HINSTANCE,HINSTANCE,LPSTR,int)'int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)声明冲突:注意:以前的声明'int WinMain(HINSTANCE,HINSTANCE,LPSTR,int);

如果我尝试使用命令g++main.cpp-municode,那么我会得到以下消息

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

共有1个答案

司徒捷
2023-03-14
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
 类似资料:
  • 我终于绝望了。所以,在我的c课上,我们被指示使用类。我们会让头文件声明类和函数,而另一个单独的. cpp文件实现它。事情应该是有效的,但他们没有,网上没有解决方案似乎对我有用。为此,我在linux上使用了G编译器,它似乎在IDE或普通命令行上都无法工作。 我在笔记本上看到的错误。h是这样的: 我有点不喜欢该文件没有接收任何电话类的方法。下面是TBook的代码。h: 这就是TBook.cpp的样子:

  • 我正在尝试使用AassetManager从android apk访问资产。然而,尽管我已经包含了asset_manager.h和asset_manager_jni.h,但我仍然得到了“对aassetmanager_fromjava的未定义引用”。其他来自asset_manager.h的函数,如AAssetManager_openDir(mgr,"“)等也不能被引用。 以下是完整的代码 这段代码在一

  • 错误:未定义对'pthread_cancel'的引用

  • 问题内容: 我在使用C ++(Eclipse)的Linux中工作,并且想要使用一个库。Eclipse显示了一个错误: 你知道解决方案吗? 这是我的代码: 问题答案: 您必须针对libdl进行链接,添加 -ldl 到您的链接器选项

  • 问题内容: 我试图将库包含在我的项目中,并且一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu 12.10上,尝试手动读取站点上的说明来安装库,但是在头文件以及使用前需要构建的库中出现错误。 然后,我通过terminalby安装了库。此后,在我的代码块程序中,可以包含类似的标题,但是当我尝试包含Filesystem库的标题( )时,出现以下错误: 我不确定如何解决此错误(特别

  • 我正试图将库包括在我的项目中,并一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu12.10上,尝试手动安装库,阅读网站上的说明,但在使用库之前,得到了带有标题的错误以及要构建的错误。 然后,我通过terminalby