偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

Qt下只有 main?

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

WinMain

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

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

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

如果我們指定了 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在這兒藏著呢。當我們創(chuàng)建不帶控制臺的程序時,Qt將鏈接qtmain這么庫,這個庫封裝了WinMain。最終我們自己的main函數在這個WinMain中被調用了。

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

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

入口函數與嵌入可執(zhí)行文件的啟動函數 

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#發(fā)送郵件

2009-09-02 16:14:21

C#動態(tài)創(chuàng)建數組

2009-09-03 17:06:17

C#回車切換焦點

2011-06-29 17:39:04

Qt 發(fā)布 編譯

2011-06-22 17:36:50

QT Linux 串口

2011-06-16 10:09:25

QT Windows DLL

2009-08-14 09:50:46

C#復制構造函數

2009-09-03 12:52:50

C#打開記事本

2011-07-27 11:19:33

iPhone UITableVie

2011-07-28 10:11:54

iPhone開發(fā) 備忘

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技術棧公眾號