成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析 Qt 在 Windows 下入口函數實現實例

移動開發
本文介紹的是Qt 在 Windows 下入口函數實現實例,先來看內容,有詳細介紹。

QtWindows 入口函數實現實例是本文介紹的內容。Windows入口函數 有 main 和 WinMain 兩種(還有其對應的 Unicode 版本,此處不考慮)。一般來說,前者是 控制臺程序 的入口函數,后者是 GUI 程序的入口函數

Qt下只有 main?

Qt 是C++ 的庫,它也改變不了 main 和 WinMain 兩種入口函數的事實;但實際中,我們在 Qt 程序中只寫main函數,而從不寫WinMain函數。這是怎么回事呢?

WinMain

當我們將 Windows 版的Qt裝好以后,在其lib目錄內,會發現兩個庫:qtmain.lib 和 qtmaind.lib(或者 libqtmain.a和 libqtmaind.a)

很容易判斷,這兩個庫是同一個東西(帶d的是debug版,不帶的是release版),所以我們下面可以稱其為一個庫。那么這一個庫有什么用呢?

如果細心的話,我們會發現:當我們的pro文件內 不指定 CONFIG += console (而且也不使用 qtestlib模塊)時,程序編譯時會鏈接該庫。最終的程序執行時也不會出現控制臺。

如果我們指定了 CONFIG+= console (或者使用了 qtestlib模塊)時,程序鏈接時將不需要該庫,程序運行時也會出現控制臺。

那么?這個 qtmain 庫內到底是什么東西呢,會不會和WinMain有什么瓜葛?

如果找到源碼就好辦了,恩 %QTDIR%\src\winmain\qtmain_win.cpp

打開一看,一切明白了:

  1. /*   
  2.  WinMain() - Initializes Windows and calls user's startup function main().  
  3. NOTE: WinMain() won't be called if the application was linked as a "console"  application.  
  4. */  
  5. #ifdef Q_OS_WINCEint WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR   
  6. /*wCmdParam*/,  
  7. int cmdShow)#elseextern "C"int APIENTRY WinMain(HINSTANCE instance,   
  8. HINSTANCE prevInstance, LPSTR   
  9. /*cmdParamarg*/, int cmdShow)#endif{...}  
  10.  

原來WinMain在這兒藏著呢。當我們創建不帶控制臺的程序時,Qt將鏈接qtmain這么庫,這個庫封裝了WinMain。最終我們自己的main函數在這個WinMain中被調用了。

這么做的好處? 我想最主要的一點或許是:

把各種平臺下的入口函數封裝起來,易于編譯跨平臺的程序(至少不用我們用預處理宏來寫各種入口函數了)

入口函數與嵌入可執行文件的啟動函數 

main

  1. mainCRTStartup  
  2. inMain  
  3. WinMainCRTStartup 

MSVC

對 MSVC 系列的編譯器,指定鏈接子系統比如 /subsystem:console,鏈接器就會尋找main函數,并選擇mainCRTStartup函數;對windows子系統,情況類似。

當我們程序的入口函數是 WinMain 時,如果指定 console 子系統,鏈接器將報錯,這時我們可以指定入口點啟動函數 /entry:WinMainCRTStartup 來解決這種問題。

Mingw

Mingw 的情況與 MSVC系列有所不同,據說是下面這個樣子:

Mingw運行時提供了兩個入口點啟動函數:

mainCRTStartup() 對控制臺程序 (-subsystem,console)

WinMainCRTStartup() 對GUI程序 (-subsystem,windows)

但這兩個函數都調用的是:

__mingw_CRTStartup()這樣一來,控制臺程序和GUI程序的行為時一樣的:

調用 main 函數

如果 main 函數不存在,libmaingw32.a將被鏈接進來,該庫里面提供了一個main函數(該函數將調用用戶的WinMain函數)

小結:解析 Qt Windows 入口函數實現實例的內容介紹完了,希望本文對你有所幫助。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-29 16:50:17

Qt 顯示寬字符

2009-09-01 16:59:25

C#畫直線

2009-09-01 13:59:01

C#操作Excel

2009-09-03 17:23:45

C#發送郵件

2009-09-03 17:06:17

C#回車切換焦點

2009-09-02 16:14:21

C#動態創建數組

2011-06-29 17:39:04

Qt 發布 編譯

2009-08-14 09:50:46

C#復制構造函數

2011-06-22 17:36:50

QT Linux 串口

2011-06-16 10:09:25

QT Windows DLL

2009-09-03 12:52:50

C#打開記事本

2011-07-27 11:19:33

iPhone UITableVie

2011-07-28 10:11:54

iPhone開發 備忘

2011-06-21 09:33:49

Qt 啟動 界面

2011-06-23 15:32:05

Qt Windows消息

2011-03-23 15:58:50

全局熱鍵QtWindows

2009-07-22 11:27:36

iBATIS模糊查詢

2009-08-17 14:41:47

C#進度條實現

2009-08-27 18:09:49

C#接口的實現

2009-09-09 12:55:59

C# TextBox事
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 玖玖视频国产 | 久久99精品久久久久久国产越南 | 久草中文在线观看 | 久久精品国产a三级三级三级 | 国产日韩欧美在线观看 | 日本三级网址 | 桃花av在线| 欧美日韩精品中文字幕 | 久久国产精品无码网站 | 国产精品视频一区二区三区不卡 | 午夜一区二区三区在线观看 | 午夜视频在线观看视频 | 中文在线播放 | 久久久婷婷| 在线午夜 | 成人av免费| 美女黄网站| 久久在线| 日韩精品一区二区三区中文在线 | 不卡视频一区二区三区 | 亚洲电影免费 | 欧美一区不卡 | 久久国 | 国产成人精品亚洲日本在线观看 | 国产精品成人一区 | 午夜影院在线观看 | 欧美精品久久久久 | 日日夜夜影院 | 国产一区免费视频 | 国产视频久 | 成人网av| 美女国产精品 | 亚洲精品一区二区三区蜜桃久 | 午夜激情视频 | 色综合中文 | 欧美激情五月 | 成人欧美一区二区三区黑人孕妇 | 欧美一区二区三区视频 | 国产亚洲一区二区三区 | 午夜在线视频 | 91视频免费 |