首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 入門:如何在 VS2010 中自定義 main 函數入口點

     編輯:程式設計綜合問答

問題背景

MFC 應用程式框架默認使用 `WinMain` 作為入口點,並由 `CWinApp` 派生類管理初始化流程。若需插入自定義的 `main()` 函數(如控制台混合模式、特殊初始化邏輯),必須重定義入口點。

解決方案:重定義 MFC 入口點

  1. 在專案屬性 → **Linker (連結器) → Advanced (進階) → Entry Point (入口點)** 中設置為自定義函數名(如 `MyMain`)。
  2. 或在代碼中使用 `#pragma comment(linker, "/entry:MyMain")` 指定入口點。
  3. 自定義入口函數中手動調用 MFC 初始化流程:

關鍵代碼實現

// 自定義入口點
int MyMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 1. 初始化 MFC 狀態
    if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
    {
        return FALSE;
    }

    // 2. 執行自定義邏輯(如控制台分配、配置讀取等)
    AllocConsole();
    freopen("CONOUT$", "w", stdout);
    printf("Custom initialization...\n");

    // 3. 創建並運行應用程式物件
    CMyApp theApp;  // 你的 CWinApp 派生類
    return theApp.Run();
}

// 禁用默認 WinMain
// 專案屬性 -> Linker -> System -> SubSystem: Console (/SUBSYSTEM:CONSOLE)
// 或在 stdafx.h 前添加:
// #define _AFXDLL
// #pragma comment(linker, "/subsystem:console /entry:MyMain")

注意事項

  • 子系統選擇:若需控制台輸出,Linker → System → SubSystem 設為 `Console (/SUBSYSTEM:CONSOLE)`;純 GUI 則用 `Windows (/SUBSYSTEM:WINDOWS)`。
  • 全局應用程式物件:MFC 要求全局唯一的 `CWinApp` 派生物件(通常命名為 `theApp`),需在入口函數中實例化並調用 `Run()`。
  • 預編譯頭:確保 `stdafx.h` 包含 `` 等核心頭文件。
  • 命令行參數:`lpCmdLine` 包含完整命令行,可用 `CommandLineToArgvW` 解析為 `argv` 數組。

參考資源

詳細步驟請參考:CSDN 博客:重定義 MFC 函數入口點

提示: 現代 MFC 開發極少需要自定義 `main`。若需控制台輔助調試,建議在 `InitInstance()` 中調用 `AllocConsole()`,保持標準框架流程不變。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved