《windows編程零基礎》__1 Hello,World

來源:互聯網
上載者:User
第一個工程1)開啟Visual Studio,如下地建一個工程
2)選擇一個空的工程
3) 建立一個檔案這個不解釋了吧,你肯定會添加一個cpp檔案的。
4)輸入如下代碼
#include <windows.h>#pragma comment(linker, "/entry:\"main\" /subsystem:\"windows\"")int main(){MessageBox(NULL, TEXT("Hello,World"),TEXT("NULL"),  MB_OK);}

5)按下 Ctrl + F5此時可以運行程式了,是不是看到了一個小視窗呢?是不是這此代碼比較熟悉呢?、是的,事情就是這樣,你看到的就是Windows上開發所需要的一切。代碼解釋第一行第一行是#include <windows.h>,任何Windows平台上的應用程式肯定需要引用一些Windows的函數或者變數,而這些函數或者變數的聲明就在Windows.h裡面,所以我們需要包含它,這跟大家包含stdio.h一樣的道理。第二行也許大家看到的Windows程式是以WinMain開頭的,然而,你們在這裡面看到的是main?有人懷疑我寫錯了,事實上,我沒有寫錯,所謂的main函數是一個邏輯上的概念,也就是告訴連結器,我這個程式要從哪裡開始執行,C(++)裡面的入口函數是main,Windows上是WinMain,這些並沒有錯,當然,也允許我們自己設定入口函數。這裡面的#pragma
comment(linker, "/entry:\"main\" /subsystem:\"windows\"")裡面的/entry其實是設定入口函數,/subsystem其實是設定子系統(gui的或者console的),gui的程式是沒有黑框框的,console的程式是大家平時看到的一個黑框框,大家的第一次hello,world基本上是交給它的,正如大家的第一次上網基本交給了IE一樣。第三行第三行是一個函數調用,大家肯定知道的對吧,這個函數調用的是MessageBox,即一個Windows裡面的API,定義於user32.dll裡面。為了方便大家寫程式,我建議大家安裝一個叫做msdn的東西,如果大家不知道哪裡下載,可以從以下網址下載http://download.microsoft.com/download/F/D/E/FDE79687-B716-4893-9BE3-1512F40388B1/CHSMSDNX1530343.ISO。然後你在裡面輸入MessageBox,你會看到如下所說明:
顯然,這個文檔告訴你MessageBox各參數的用法與說明,具體怎麼翻譯我不解釋了吧,你懂的。細節說明TEXT是什麼把滑鼠放在TEXT上面,然後按下F12,你會看到如下的說明,其定義等價於如下的:

#ifdef UNICODE#define TEXT(queto) L##queto#else#define TEXT(queto) queto#endif

從中可以從字面地看出來吧
UNICODE是什麼在C語言中我們可以一般寫字串中都是用“Hello,World”這種寫法,而沒有上面的那種TEXT("Hello,World")的寫法,在Windows裡面,為了便於作業系統的移植,使用了兩種字元表示,一個是多位元組碼,一種是UNICODE表示,如果在一個ascii字串前面加上L,那麼它就變成了UNICODE串,比如L"ABC"可以剛才如下網址:http://baike.baidu.com/view/40801.htm
##是什麼在Windows平台的C語言中有##表示串聯接,比如“ABC”##"DEF"你就得到了"ABCDEF"了,這個估計很多人都不知道。這個東西在MFC的實現中用得特別多。
LPTSTR是什麼通過在LPTSTR上按F12,可以看到如下的等價定義

#ifdef UNICODE#define LPTSTRwchar_t*#else#define LPTSTRchar*#endif

因為LPTSTR表示字串,上面已經提到了,在UNICODE中,字串是UNICODE串,也即是const wchar_t[],在非UNICODE中,字串是const char*,即const char[]。LPTSTR的使用避免了在不同環境下源碼編譯的問題。
MessageBox是一個函數?其實 ,MessageBox不是一個函數,與之相關的函數有兩個,MessageBoxA與MessageBoxW,根據是否使用UNICODE串從而定義MessageBox是MessageBoxA還是MessageBoxW,並且,在user32.dll裡面同時實現了這兩個API,當然MessageBoxA的實現中會調用MessageBoxW。通過 dumpbin -exports user32.dll可以看到如下的結果
dumpbin -exports可以看出一個dll裡面匯出了什麼函數,這個工具是由visual studio sdk提供的,大家安裝完visual sutdio之後就會自動安裝這個工具,不需要單獨下載。
由於今天不太高興,就先寫第一章節到這裡,以後有時間再寫,另外,快放暑假了,準備回家休息幾個星期。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.