在MFC中,wWinMain
定義在appmodul.cpp
中。這個文件是從我所能看到的內置到mfc90ud.dll中的。但是,當我運行我的應用程序時,調用堆棧顯示MyApplication.exe!wWinMain
。 appmodul.obj
中導出的wWinMain
函數如何處理並將其放入我的應用程序中?MFC的wWinMain如何在可執行文件中結束?
5
A
回答
10
右鍵單擊解決方案資源管理器窗口中的項目,屬性,鏈接器,命令行。在「其他選項」框中鍵入/詳細。重建你的項目。 「輸出」窗口現在顯示鏈接器找到符號的位置。搜索它的「winmain」找到這個:
1> Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib\mfcs90ud.lib:
1> Found [email protected]
1> Referenced in msvcrtd.lib(wcrtexew.obj)
1> Loaded mfcs90ud.lib(appmodul.obj)
請注意庫名稱,mfcs90ud.lib是一個靜態鏈接庫。如果你搜索「mfcs90ud.lib」,那麼你還可以看到該庫是怎麼引用:
1>Starting pass 1
1>Processed /DEFAULTLIB:mfc90ud.lib
1>Processed /DEFAULTLIB:mfcs90ud.lib
1>Processed /DEFAULTLIB:msvcrtd.lib
etc..
如果你搜索的MFC源代碼「微生物燃料電池」,你會發現這個/ defaultlib選項是怎麼注入。來自afx.h:
#ifdef _DEBUG
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
#else
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
#endif
長話短說,MFC應用程序鏈接兩個庫。 Mfc90u.lib是MFC的DLL版本的導入庫。 Mfcs90u.lib是一個靜態鏈接庫,它包含鏈接到可執行文件中的位。包括WinMain()。
1
鏈接器完成所有工作。它採用所有的目標文件,庫文件並匹配它所需的內容。與裝飾一起,它可以將正確的聲明與定義等相匹配。
1
神奇的是通過的CWinApp的構造函數中完成:
- 您聲明此類型(主要的衍生型)的一個全局變量。
- CWinApp :: CWinApp被調用(之前任何主程序)。
- 它設置了一些數據結構,這是後來由
AfxGetApp()
返回的 - 這是相當複雜的東西! wWinMain
被調用,它使用由CWinApp構造函數設置的數據結構。
嘗試從wWinMain
或從您的自定義CWinApp
派生構造函數進行調試。
相關問題
- 1. 如何在安裝項目結束時運行可執行文件?
- 2. 如何查看可執行文件需要哪個MFC版本?
- 3. 如何正確啓動安裝結束時的可執行文件?
- 4. 如何在事件驅動編程中找到執行結束
- 5. 如何在測試中用可執行文件替換可執行文件?
- 6. 如何在Linux上的java文件中執行可執行文件?
- 7. 可執行文件的結果
- 8. 如何在Ruby中結束塊的執行?
- 9. 可執行文件之間的數據(ANSI C,MFC 4.1)
- 10. 如何在可執行文件中保存文本文件?
- 11. 可執行文件中包含的排序算法由Signal 11命令結束?
- 12. 如何在bash中找到可用的可執行文件
- 13. 在單個可執行文件中結合使用x86和x64可執行文件(如Sysinternals工具)
- 14. 我如何在cpp可執行文件中嵌入licence.licx文件?
- 15. 阻止文件句柄在執行結束時關閉
- 16. 使用Java代碼操作MFC對話框可執行文件
- 17. 如何在可執行文件所在的文件夾中創建txt文件
- 18. Windows可執行文件結構
- 19. 如何在`flask-admin`中執行約束?
- 20. 我可以在執行結束時使靜態變量生存期結束嗎?
- 21. 在gradlew中運行可執行文件
- 22. 在PHP中運行可執行文件
- 23. 在linux中運行可執行文件
- 24. 如何在java中加載可執行文件中的Jasper Report?
- 25. 如何在Ruby中的$ PATH中搜索可執行文件
- 26. PHP - 從函數內部結束當前文件的執行
- 27. 如何在IntelliJ IDEA中運行EXE Go可執行文件?
- 28. 如何在iOS應用程序中運行可執行文件?
- 29. 如何在eclipse中執行一個可運行jar文件
- 30. 如何在WiX中使用參數運行可執行文件?
非常好,謝謝你的回答:) –
問題的原因是我想覆蓋MFC中的一些初始啓動。我最初的想法是去WinMain,但現在我知道我可以使用AfxWinMain來代替。 –