青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

pragma comment的使用(轉(zhuǎn))

#pragma 的使用

盡管 C 和 C++ 都已經(jīng)有標(biāo)準(zhǔn),但是幾乎每個(gè)編譯器 (廣義,包含連接器等) 擴(kuò)展一些 C/C++ 關(guān)鍵字。

合理地應(yīng)用這些關(guān)鍵字,有時(shí)候能使我們的工作非常方便。下面隨便說(shuō)說(shuō) Visual C++ 中 #pragma

指示符的使用。

一、用#pragma導(dǎo)出DLL函數(shù)

    傳統(tǒng)的到出 DLL 函數(shù)的方法是使用模塊定義文件 (.def),Visual C++ 提供了更簡(jiǎn)潔方便的方法,

那就是“__declspec()”關(guān)鍵字后面跟“dllexport”,告訴連接去要導(dǎo)出這個(gè)函數(shù),例如:


__declspec(dllexport) int __stdcall MyExportFunction(int iTest);

    把“__declspec(dllexport)”放在函數(shù)聲明的最前面,連接生成的 DLL 就會(huì)導(dǎo)出函數(shù)

“_MyExportFunction@4”。

    上面的導(dǎo)出函數(shù)的名稱(chēng)也許不是我的希望的,我們希望導(dǎo)出的是原版的“MyExportFunction”。

還好,VC 提供了一個(gè)預(yù)處理指示符“#pragma”來(lái)指定連接選項(xiàng) (不僅僅是這一個(gè)功能,還有很多指示功能) ,

如下:


#pragma comment(linker,"/EXPORT:MyExportFunction=_MyExportFunction@4")

    這下就天如人愿了:)。如果你想指定導(dǎo)出的順序,或者只將函數(shù)導(dǎo)出為序號(hào),沒(méi)有 Entryname,

這個(gè)預(yù)處理指示符 (確切地說(shuō)是連接器) 都能夠?qū)崿F(xiàn),看看 MSDN 的語(yǔ)法說(shuō)明:


/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

   @ordinal 指定順序;NONAME 指定只將函數(shù)導(dǎo)出為序號(hào);DATA 關(guān)鍵字指定導(dǎo)出項(xiàng)為數(shù)據(jù)項(xiàng)。

二、指示文件只包含一次

    在頭文件中,一般在整個(gè)工程中我們只要包含一次就夠了,但是如果我在多個(gè) .c/.cpp 文件中都要包

含著個(gè)頭文件,比如 Windows.h,那很多聲明等等豈不是有兩次了?解決這個(gè)問(wèn)題的傳統(tǒng)的方法是在頭文件

開(kāi)始出用

#define 定義一個(gè)宏,比如 Windows.h 中:


    
      #ifndef _WINDOWS_#define _WINDOWS_
    
    
    P>    然后在文件結(jié)為加上 #endif,這樣就可以避免被包含多次。但是這樣的后果是代碼的可讀性較差

(個(gè)人觀點(diǎn)),VC 給我們提供了另外一個(gè)途徑,那就是在文件的前面加上:#pragma once    是不是很方便?

三、使警告無(wú)效    有時(shí)候我們不得不對(duì)變量進(jìn)行強(qiáng)制轉(zhuǎn)換,由此引來(lái)編譯器的一番警告,特別是 C++ 中

,類(lèi)型檢查相對(duì)于 C 更為嚴(yán)格。這雖然不影響什么,但是看起來(lái)多不爽——我是故意要這樣的,

你警告什么!:)這時(shí)候你看到警告類(lèi)型,

比如“warning C4311: “類(lèi)型轉(zhuǎn)換” : 從“HHOOK”到“BOOL”的指針截?cái)?#8221;,在前面加上:

#pragma warning(disable: 4311)    編譯器就沒(méi)話(huà)說(shuō)了:)。

四、指定連接要使用的庫(kù)    比如我們連接的時(shí)候用到了 WSock32.lib,你當(dāng)然可以

不辭辛苦地把它加入到你的工程中。但是我覺(jué)得更方便的方法是使用 #pragma 指示符,指定要連接的庫(kù):

#pragma comment(lib, "WSock32.lib")五、顯示編譯消息    沒(méi)多少用處,舉個(gè)例子吧:

#ifdef _DEBUG#pragma message

("編譯連接為調(diào)試模式...")#endif // _DEBUG

 

 

在所有的預(yù)處理指令中,#Pragma 指令可能是最復(fù)雜的了,它的作用是設(shè)定編譯器的狀態(tài)或者是指示

編譯器完成一些特定的動(dòng)作。#pragma
指令對(duì)每個(gè)編譯器給出了一個(gè)方法,在保持與C和C++語(yǔ)言完全兼容的情況下,給出主機(jī)或操作系統(tǒng)專(zhuān)有

的特征。依據(jù)定義,編譯指示是機(jī)器或操作系統(tǒng)專(zhuān)有的,且對(duì)于每個(gè)編譯器都是不同的。
其格式一般為: #Pragma Para
其中Para 為參數(shù),下面來(lái)看一些常用的參數(shù)。

(1)message 參數(shù)。 Message 參數(shù)是我最喜歡的一個(gè)參數(shù),它能夠在編譯信息輸出窗
口中輸出相應(yīng)的信息,這對(duì)于源代碼信息的控制是非常重要的。其使用方法為:
#Pragma message(“消息文本”)
當(dāng)編譯器遇到這條指令時(shí)就在編譯輸出窗口中將消息文本打印出來(lái)。
當(dāng)我們?cè)诔绦蛑卸x了許多宏來(lái)控制源代碼版本的時(shí)候,我們自己有可能都會(huì)忘記有沒(méi)有正確的設(shè)

置這些宏,此時(shí)我們可以用這條指令在編譯的時(shí)候就進(jìn)行檢查。假設(shè)我們希望判斷自己有沒(méi)有在源

代碼的什么地方定義了

_X86這個(gè)宏可以用下面的方法
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
當(dāng)我們定義了_X86這個(gè)宏以后,應(yīng)用程序在編譯時(shí)就會(huì)在編譯輸出窗口里顯示“_
X86 macro activated!”。我們就不會(huì)因?yàn)椴挥浀米约憾x的一些特定的宏而抓耳撓腮了

(2)另一個(gè)使用得比較多的pragma參數(shù)是code_seg。格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能夠設(shè)置程序中函數(shù)代碼存放的代碼段,當(dāng)我們開(kāi)發(fā)驅(qū)動(dòng)程序的時(shí)候就會(huì)使用到它。

(3)#pragma once (比較常用)
只要在頭文件的最開(kāi)始加入這條指令就能夠保證頭文件被編譯一次,這條指令實(shí)際上在VC6中就已經(jīng)有了,

但是考慮到兼容性并沒(méi)有太多的使用它。

(4)#pragma hdrstop表示預(yù)編譯頭文件到此為止,后面的頭文件不進(jìn)行預(yù)編譯。BCB可以預(yù)編譯頭文件以加

快鏈接的速度,但如果所有頭文件都進(jìn)行預(yù)編譯又可能占太多磁盤(pán)空間,所以使用這個(gè)選項(xiàng)排除一些頭文件。
有時(shí)單元之間有依賴(lài)關(guān)系,比如單元A依賴(lài)單元B,所以單元B要先于單元A編譯。你可以用

#pragma startup指定編譯優(yōu)先級(jí),如果使用了#pragma package(smart_init) ,BCB就會(huì)根據(jù)優(yōu)先級(jí)的

大小先后編譯。

(5)#pragma resource "*.dfm"表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體
外觀的定義。

(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價(jià)于:
#pragma warning(disable:4507 34) // 不顯示4507和34號(hào)警告信息
#pragma warning(once:4385) // 4385號(hào)警告信息僅報(bào)告一次
#pragma warning(error:164) // 把164號(hào)警告信息作為一個(gè)錯(cuò)誤。
同時(shí)這個(gè)pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
這里n代表一個(gè)警告等級(jí)(1---4)。
#pragma warning( push )保存所有警告信息的現(xiàn)有的警告狀態(tài)。
#pragma warning( push, n)保存所有警告信息的現(xiàn)有的警告狀態(tài),并且把全局警告
等級(jí)設(shè)定為n。
#pragma warning( pop )向棧中彈出最后一個(gè)警告信息,在入棧和出棧之間所作的
一切改動(dòng)取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在這段代碼的最后,重新保存所有的警告信息(包括4705,4706和4707)。
(7)pragma comment(...)
該指令將一個(gè)注釋記錄放入一個(gè)對(duì)象文件或可執(zhí)行文件中。
常用的lib關(guān)鍵字,可以幫我們連入一個(gè)庫(kù)文件。



#pragma comment( comment-type [,"commentstring"] )

comment-type是一個(gè)預(yù)定義的標(biāo)識(shí)符,指定注釋的類(lèi)型,應(yīng)該是compiler,exestr,lib,linker之一。
commentstring是一個(gè)提供為comment-type提供附加信息的字符串,
Remarks:
1、compiler:放置編譯器的版本或者名字到一個(gè)對(duì)象文件,該選項(xiàng)是被linker忽略的。
2、exestr:在以后的版本將被取消。
3、lib:放置一個(gè)庫(kù)搜索記錄到對(duì)象文件中,這個(gè)類(lèi)型應(yīng)該是和
commentstring(指定你要Liner搜索的lib的名稱(chēng)和路徑)
這個(gè)庫(kù)的名字放在Object文件的默認(rèn)庫(kù)搜索記錄的后面,linker搜索這個(gè)這個(gè)庫(kù)就像你在命令行輸入這個(gè)命令一樣。你可以
在一個(gè)源文件中設(shè)置多個(gè)庫(kù)記錄,它們?cè)趏bject文件中的順序和在源文件中的順序一樣。如果默認(rèn)庫(kù)和附加庫(kù)的次序是需要
區(qū)別的,使用Z編譯開(kāi)關(guān)是防止默認(rèn)庫(kù)放到object模塊。
4、linker:指定一個(gè)連接選項(xiàng),這樣就不用在命令行輸入或者在開(kāi)發(fā)環(huán)境中設(shè)置了。
只有下面的linker選項(xiàng)能被傳給Linker.
  • /DEFAULTLIB

  • /EXPORT

  • /INCLUDE

  • /MANIFESTDEPENDENCY

  • /MERGE

  • /SECTION

(1)/DEFAULTLIB:library

/DEFAULTLIB 選項(xiàng)將一個(gè) library 添加到 LINK 在解析引用時(shí)搜索的庫(kù)列表。用 /DEFAULTLIB 指定的庫(kù)在命令行上指定的庫(kù)之后和 .obj 文件中指定的默認(rèn)庫(kù)之前被搜索。

忽略所有默認(rèn)庫(kù) (/NODEFAULTLIB) 選項(xiàng)重寫(xiě) /DEFAULTLIB:library。如果在兩者中指定了相同的 library 名稱(chēng),忽略庫(kù) (/NODEFAULTLIB:library) 選項(xiàng)將重寫(xiě) /DEFAULTLIB:library

(2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

使用該選項(xiàng),可以從程序?qū)С龊瘮?shù),以便其他程序可以調(diào)用該函數(shù)。也可以導(dǎo)出數(shù)據(jù)。通常在 DLL 中定義導(dǎo)出。entryname 是調(diào)用程序要使用的函數(shù)或數(shù)據(jù)項(xiàng)的名稱(chēng)。ordinal 在導(dǎo)出表中指定范圍在 1 至 65,535 的索引;如果沒(méi)有指定 ordinal,則 LINK 將分配一個(gè)。NONAME 關(guān)鍵字只將函數(shù)導(dǎo)出為序號(hào),沒(méi)有 entryname

DATA 關(guān)鍵字指定導(dǎo)出項(xiàng)為數(shù)據(jù)項(xiàng)。客戶(hù)程序中的數(shù)據(jù)項(xiàng)必須用 extern __declspec(dllimport) 來(lái)聲明。
有三種導(dǎo)出定義的方法,按照建議的使用順序依次為:

  1. 源代碼中的 __declspec(dllexport)

  2. .def 文件中的 EXPORTS 語(yǔ)句

  3. LINK 命令中的 /EXPORT 規(guī)范

所有這三種方法可以用在同一個(gè)程序中。LINK 在生成包含導(dǎo)出的程序時(shí)還創(chuàng)建導(dǎo)入庫(kù),除非生成中使用了 .exp 文件。
LINK 使用標(biāo)識(shí)符的修飾形式。編譯器在創(chuàng)建 .obj 文件時(shí)修飾標(biāo)識(shí)符。如果 entryname 以其未修飾的形式指定給鏈接器(與其在源代碼中一樣),則 LINK 將試圖匹配該名稱(chēng)。如果無(wú)法找到唯一的匹配名稱(chēng),則 LINK 發(fā)出錯(cuò)誤信息。當(dāng)需要將標(biāo)識(shí)符指定給鏈接器時(shí),請(qǐng)使用 Dumpbin 工具獲取該標(biāo)識(shí)符的修飾名形式。

(3)/INCLUDE:symbol

/INCLUDE 選項(xiàng)通知鏈接器將指定的符號(hào)添加到符號(hào)表。

若要指定多個(gè)符號(hào),請(qǐng)?jiān)诜?hào)名稱(chēng)之間鍵入逗號(hào) (,)、分號(hào) (;) 或空格。在命令行上,對(duì)每個(gè)符號(hào)指定一次 /INCLUDE:symbol
鏈接器通過(guò)將包含符號(hào)定義的對(duì)象添加到程序來(lái)解析 symbol。該功能對(duì)于添包含不會(huì)鏈接到程序的庫(kù)對(duì)象非常有用。用該選項(xiàng)指定符號(hào)將通過(guò) /OPT:REF 重寫(xiě)該符號(hào)的移除。



我們經(jīng)常用到的是#pragma   comment(lib,"*.lib")這類(lèi)的。
#pragma   comment(lib,"Ws2_32.lib")表示鏈接Ws2_32.lib這個(gè)庫(kù)。   
和在工程設(shè)置里寫(xiě)上鏈入Ws2_32.lib的效果一樣,不過(guò)這種方法寫(xiě)的   
程序別人在使用你的代碼的時(shí)候就不用再設(shè)置工程settings了

posted on 2010-08-07 22:21 蝸牛也Coding 閱讀(17315) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

# re: pragma comment的使用(轉(zhuǎn)) 2011-09-02 18:32 chanel watches

I really like:
-Malleus Maleficarium, as a good history book and very eye opening as well  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(8)

隨筆檔案(78)

搜索

積分與排名

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩一区二区高清| 日韩视频永久免费观看| 亚洲精品美女久久7777777| 国内成人精品2018免费看| 欧美丝袜第一区| 欧美日韩国产123区| 农村妇女精品| 欧美精品在线观看一区二区| 欧美精品在线视频| 欧美日韩一区自拍| 国产精品一二三| 国产一区二区三区的电影 | 性欧美xxxx视频在线观看| 午夜精品偷拍| 蜜月aⅴ免费一区二区三区| 男人插女人欧美| 欧美调教vk| 精品成人久久| 亚洲在线视频一区| 老司机精品视频网站| 亚洲国产日韩综合一区| 欧美好吊妞视频| 一区二区三区 在线观看视频| 亚洲欧美激情四射在线日| 久久久久国产一区二区三区| 欧美韩日一区二区| 最新日韩欧美| 亚洲无玛一区| 老司机免费视频久久| 国产精品chinese| 亚洲激情自拍| 久久久国产91| 一本久道综合久久精品| 久久视频在线视频| 国产欧美69| 一区二区三区久久精品| 欧美成人精品不卡视频在线观看| 在线中文字幕不卡| 欧美成年人视频网站| 国产午夜久久久久| 亚洲欧美激情一区二区| 亚洲三级免费电影| 免费不卡欧美自拍视频| 狠狠综合久久| 久久久久在线观看| 亚洲欧美国产日韩天堂区| 欧美精品一区二区三区蜜桃| 在线国产欧美| 美日韩精品免费| 翔田千里一区二区| 国产精品永久在线| 午夜亚洲性色福利视频| 亚洲少妇在线| 国产精品免费网站| 午夜久久黄色| 亚洲欧美日韩精品一区二区| 国产精品久久久久久久久久免费看| 日韩视频不卡中文| 亚洲国产一区二区三区高清| 久久综合久久久| 在线观看欧美成人| 欧美mv日韩mv国产网站app| 久久精精品视频| 黑人巨大精品欧美黑白配亚洲| 亚洲欧美一级二级三级| 中文有码久久| 国产精品女主播一区二区三区| 一区二区国产在线观看| 亚洲精品中文字幕有码专区| 欧美区在线播放| 亚洲夜晚福利在线观看| 亚洲美女在线国产| 欧美色欧美亚洲另类七区| 这里只有视频精品| 亚洲午夜伦理| 国产一区二区视频在线观看| 久久久蜜桃一区二区人| 久久久噜噜噜久久中文字免| 激情亚洲网站| 亚洲激情第一页| 国产精品magnet| 久久gogo国模裸体人体| 久久精品日产第一区二区三区| 亚洲国产成人在线播放| 亚洲精品女av网站| 欧美精品激情在线观看| 免费欧美日韩| 欧美久久一区| 亚洲综合欧美| 香蕉亚洲视频| 亚洲人成艺术| 亚洲免费在线视频| 永久91嫩草亚洲精品人人| 亚洲国产女人aaa毛片在线| 欧美日韩免费一区二区三区| 欧美一区二区日韩| 久久性色av| 亚洲一区在线播放| 久热综合在线亚洲精品| 亚洲视频在线观看| 欧美在线视频一区二区| 日韩香蕉视频| 欧美在线免费视屏| 在线一区视频| 久久精品国产亚洲5555| 中文在线资源观看视频网站免费不卡| 99国产一区| 欧美在线中文字幕| 亚洲愉拍自拍另类高清精品| 久久久91精品国产一区二区三区 | 欧美色123| 91久久精品国产91久久性色tv| 这里只有精品在线播放| 91久久黄色| 久久国产视频网| 午夜性色一区二区三区免费视频| 欧美黄色日本| 欧美成人精品h版在线观看| 国产欧美精品一区二区三区介绍| 亚洲人成小说网站色在线| 在线成人激情黄色| 久久国产精品99国产| 欧美一区二区在线| 国产精品久久久999| 亚洲精品一区二区三区婷婷月| 亚洲高清视频的网址| 欧美一二三视频| 欧美在线播放一区| 国产精品稀缺呦系列在线| 一区二区三区四区在线| 一二美女精品欧洲| 欧美日韩国产综合视频在线观看中文| 欧美国产日韩视频| 亚洲国产福利在线| 麻豆精品在线视频| 亚洲高清久久久| 91久久线看在观草草青青| 蜜桃精品一区二区三区| 欧美激情欧美激情在线五月| 影音先锋日韩精品| 久久中文久久字幕| 亚洲成色www8888| 1000部精品久久久久久久久| 一区二区三区视频在线 | 国产精品毛片a∨一区二区三区|国 | 亚洲激情在线视频| 亚洲人线精品午夜| 欧美精品18+| 亚洲精品久久久蜜桃| av成人动漫| 欧美午夜精品久久久| 亚洲天堂av高清| 欧美一级免费视频| 国产亚洲综合在线| 久久久久久久91| 欧美激情免费在线| 亚洲一区二区黄色| 国产欧美日韩视频| 久久久五月天| 亚洲国产国产亚洲一二三| 亚洲精品日韩精品| 欧美日韩免费区域视频在线观看| 中日韩美女免费视频网站在线观看 | 欧美日韩精品在线播放| 一本在线高清不卡dvd | 国产精品久久久久9999吃药| 亚洲永久免费精品| 久久久久国产免费免费| 最新国产精品拍自在线播放| 欧美日韩一区二区三区在线| 亚洲女ⅴideoshd黑人| 久久亚洲私人国产精品va媚药| 在线看片欧美| 欧美午夜精品一区二区三区| 欧美一级欧美一级在线播放| 亚洲成色www久久网站| 午夜欧美不卡精品aaaaa| 亚洲电影网站| 国产精品亚洲美女av网站| 久久综合狠狠综合久久综合88| 亚洲精品日日夜夜| 久久香蕉国产线看观看av| 一区二区三区 在线观看视频| 国产日产亚洲精品| 免费在线欧美黄色| 欧美一级视频| 99精品视频免费观看视频| 久热国产精品视频| 在线一区欧美| 亚洲精品精选| 很黄很黄激情成人| 国产精品国产三级国产aⅴ9色| 久久一区二区视频| 性欧美激情精品| 一本久道久久久| 亚洲二区在线| 免费一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 亚洲一区二区三区精品在线| 亚洲国内欧美|