聪明的人猿 2024-04-02 14:37 采纳率: 88.9%
浏览 352
已结题

严重性 代码 说明 项目 LNK2019 无法解析的外部符号 main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中引用了该符号

具体报错如下

img


具体代码如下

img

img


尝试过修改字符集,mfc,以及预处理器定义与子系统。仍没解决问题

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-04-02 14:37
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题中提到了LNK2019错误,错误信息为无法解析的外部符号 main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中引用了该符号。

    这个错误通常发生在缺少main函数的情况下,或者main函数的声明与定义不匹配的情况下。

    解决方案:

    1. 检查代码中是否存在main函数的定义。需要确保在代码中存在main函数,并且函数名字拼写正确。
    2. 检查main函数的声明与定义是否匹配。需要确保main函数的声明和定义中参数个数、类型和返回值类型都一致。可以使用int类型的返回值,并接受命令行参数,即:int main(int argc, char* argv[])。
    3. 检查代码中的预处理器定义和字符集设置。可以尝试删除一些不必要的预处理器定义,或者尝试修改字符集的设置,例如将字符集设置为Unicode。
    4. 检查项目的子系统设置。可以尝试修改项目的子系统设置,例如将子系统设置为Windows (/SUBSYSTEM:WINDOWS)。
    5. 检查项目依赖的库文件。如果代码中使用了某些库文件,需要确认这些库文件是否正确链接。
    6. 清理并重新生成项目。可以尝试删除项目的生成文件,并重新生成项目。

    修改后的代码示例:

    #include <Windows.h>
    
    HINSTANCE hinst;
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
        WNDCLASSEX wCx;
        HWND hwnd;
        MSG msg;
        BOOL fGotMessage;
    
        wCx.cbSize = sizeof(wCx);
        wCx.style = CS_HREDRAW | CS_VREDRAW;
        wCx.lpfnWndProc = MainWndProc;
        wCx.cbClsExtra = 0;
        wCx.cbWndExtra = 0;
        wCx.hInstance = hinstance;
        wCx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wCx.hCursor = LoadCursor(NULL, IDC_ARROW);
        wCx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wCx.lpszMenuName = NULL;
        wCx.lpszClassName = L"MainWinClass";
        wCx.hIconSm = (HICON)LoadImage(hinstance, MAKEINTRESOURCE(5), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
    
        if (!RegisterClassEx(&wCx))
            return 1;
    
        hwnd = CreateWindow(L"MainWinclass", L"Hello", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HmND)NULL, (HMENU)NULL, hinstance, (LPVOID)NULL);
    
        if (!hwnd)
            return 1;
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        while ((fGotMessage = GetMessage(&msg, (HWND)NULL, 0, 0)) != 0 && fGotMessage != -1) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return msg.wParam;
    }
    
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
        switch (uMsg) {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }
    

    希望以上解决方案能够帮助你解决问题。如果问题还未解决,请提供更多的错误信息和代码细节,以便更好地帮助你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 4月2日