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

pragma comment的使用(轉)

#pragma 的使用

盡管 C 和 C++ 都已經有標準,但是幾乎每個編譯器 (廣義,包含連接器等) 擴展一些 C/C++ 關鍵字。

合理地應用這些關鍵字,有時候能使我們的工作非常方便。下面隨便說說 Visual C++ 中 #pragma

指示符的使用。

一、用#pragma導出DLL函數

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

那就是“__declspec()”關鍵字后面跟“dllexport”,告訴連接去要導出這個函數,例如:


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

    把“__declspec(dllexport)”放在函數聲明的最前面,連接生成的 DLL 就會導出函數

“_MyExportFunction@4”。

    上面的導出函數的名稱也許不是我的希望的,我們希望導出的是原版的“MyExportFunction”。

還好,VC 提供了一個預處理指示符“#pragma”來指定連接選項 (不僅僅是這一個功能,還有很多指示功能) ,

如下:


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

    這下就天如人愿了:)。如果你想指定導出的順序,或者只將函數導出為序號,沒有 Entryname,

這個預處理指示符 (確切地說是連接器) 都能夠實現,看看 MSDN 的語法說明:


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

   @ordinal 指定順序;NONAME 指定只將函數導出為序號;DATA 關鍵字指定導出項為數據項。

二、指示文件只包含一次

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

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

開始出用

#define 定義一個宏,比如 Windows.h 中:


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

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

三、使警告無效    有時候我們不得不對變量進行強制轉換,由此引來編譯器的一番警告,特別是 C++ 中

,類型檢查相對于 C 更為嚴格。這雖然不影響什么,但是看起來多不爽——我是故意要這樣的,

你警告什么!:)這時候你看到警告類型,

比如“warning C4311: “類型轉換” : 從“HHOOK”到“BOOL”的指針截斷”,在前面加上:

#pragma warning(disable: 4311)    編譯器就沒話說了:)。

四、指定連接要使用的庫    比如我們連接的時候用到了 WSock32.lib,你當然可以

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

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

#ifdef _DEBUG#pragma message

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

 

 

在所有的預處理指令中,#Pragma 指令可能是最復雜的了,它的作用是設定編譯器的狀態或者是指示

編譯器完成一些特定的動作。#pragma
指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機或操作系統專有

的特征。依據定義,編譯指示是機器或操作系統專有的,且對于每個編譯器都是不同的。
其格式一般為: #Pragma Para
其中Para 為參數,下面來看一些常用的參數。

(1)message 參數。 Message 參數是我最喜歡的一個參數,它能夠在編譯信息輸出窗
口中輸出相應的信息,這對于源代碼信息的控制是非常重要的。其使用方法為:
#Pragma message(“消息文本”)
當編譯器遇到這條指令時就在編譯輸出窗口中將消息文本打印出來。
當我們在程序中定義了許多宏來控制源代碼版本的時候,我們自己有可能都會忘記有沒有正確的設

置這些宏,此時我們可以用這條指令在編譯的時候就進行檢查。假設我們希望判斷自己有沒有在源

代碼的什么地方定義了

_X86這個宏可以用下面的方法
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
當我們定義了_X86這個宏以后,應用程序在編譯時就會在編譯輸出窗口里顯示“_
X86 macro activated!”。我們就不會因為不記得自己定義的一些特定的宏而抓耳撓腮了

(2)另一個使用得比較多的pragma參數是code_seg。格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能夠設置程序中函數代碼存放的代碼段,當我們開發驅動程序的時候就會使用到它。

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

但是考慮到兼容性并沒有太多的使用它。

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

快鏈接的速度,但如果所有頭文件都進行預編譯又可能占太多磁盤空間,所以使用這個選項排除一些頭文件。
有時單元之間有依賴關系,比如單元A依賴單元B,所以單元B要先于單元A編譯。你可以用

#pragma startup指定編譯優先級,如果使用了#pragma package(smart_init) ,BCB就會根據優先級的

大小先后編譯。

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

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



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

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

  • /EXPORT

  • /INCLUDE

  • /MANIFESTDEPENDENCY

  • /MERGE

  • /SECTION

(1)/DEFAULTLIB:library

/DEFAULTLIB 選項將一個 library 添加到 LINK 在解析引用時搜索的庫列表。用 /DEFAULTLIB 指定的庫在命令行上指定的庫之后和 .obj 文件中指定的默認庫之前被搜索。

忽略所有默認庫 (/NODEFAULTLIB) 選項重寫 /DEFAULTLIB:library。如果在兩者中指定了相同的 library 名稱,忽略庫 (/NODEFAULTLIB:library) 選項將重寫 /DEFAULTLIB:library

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

使用該選項,可以從程序導出函數,以便其他程序可以調用該函數。也可以導出數據。通常在 DLL 中定義導出。entryname 是調用程序要使用的函數或數據項的名稱。ordinal 在導出表中指定范圍在 1 至 65,535 的索引;如果沒有指定 ordinal,則 LINK 將分配一個。NONAME 關鍵字只將函數導出為序號,沒有 entryname

DATA 關鍵字指定導出項為數據項。客戶程序中的數據項必須用 extern __declspec(dllimport) 來聲明。
有三種導出定義的方法,按照建議的使用順序依次為:

  1. 源代碼中的 __declspec(dllexport)

  2. .def 文件中的 EXPORTS 語句

  3. LINK 命令中的 /EXPORT 規范

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

(3)/INCLUDE:symbol

/INCLUDE 選項通知鏈接器將指定的符號添加到符號表。

若要指定多個符號,請在符號名稱之間鍵入逗號 (,)、分號 (;) 或空格。在命令行上,對每個符號指定一次 /INCLUDE:symbol
鏈接器通過將包含符號定義的對象添加到程序來解析 symbol。該功能對于添包含不會鏈接到程序的庫對象非常有用。用該選項指定符號將通過 /OPT:REF 重寫該符號的移除。



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

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

評論

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

I really like:
-Malleus Maleficarium, as a good history book and very eye opening as well  回復  更多評論   

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿(8)

隨筆檔案(78)

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲新中文字幕| 韩日欧美一区二区三区| 亚洲激情偷拍| 亚洲美女视频在线免费观看| 欧美jizzhd精品欧美巨大免费| 黄色亚洲精品| 久久av在线看| 久久激情综合| 99精品视频免费全部在线| 亚洲午夜一级| 在线观看成人小视频| 亚洲高清免费视频| 欧美国产日本高清在线| 亚洲专区在线视频| 久久久久久亚洲综合影院红桃| 亚洲高清免费| 亚洲网友自拍| 亚洲日本一区二区| 亚洲精品国产精品乱码不99按摩| 欧美日精品一区视频| 欧美sm极限捆绑bd| 国产一区视频在线看| 亚洲精品免费在线观看| 国产精品久久久久久久久果冻传媒| 香蕉久久夜色精品国产| 欧美精品一区二区三区很污很色的 | 亚洲一区美女视频在线观看免费| 国产精品美女久久久| 欧美激情va永久在线播放| 欧美日韩国内自拍| 蜜桃精品久久久久久久免费影院| 欧美视频在线观看| 99视频+国产日韩欧美| 狠狠88综合久久久久综合网| 亚洲欧美日韩电影| 亚洲欧美一区二区三区久久| 欧美激情一区二区三区全黄| 欧美福利视频| 亚洲精品孕妇| 国产欧美一区二区在线观看| 性欧美xxxx视频在线观看| 欧美一区观看| 影音先锋亚洲精品| 久久综合色综合88| 亚洲狠狠婷婷| 亚洲一区二区三区涩| 国产精品大片wwwwww| 亚洲一区二区三区三| 欧美主播一区二区三区美女 久久精品人 | 亚洲一区一卡| 亚洲人成绝费网站色www| 亚洲美女视频在线观看| 欧美二区在线看| 亚洲另类春色国产| 久久久综合网| 亚洲私人影院| 亚洲激情视频在线| 国产欧美一区二区精品婷婷 | 99热这里只有精品8| 一级日韩一区在线观看| 国产精品久久久久av免费| 久久综合国产精品台湾中文娱乐网| 亚洲日本理论电影| 老司机午夜免费精品视频| 最新亚洲电影| 91久久久在线| 一区二区三区在线观看国产| 欧美韩日一区二区三区| 欧美在线一二三| 亚洲欧美日韩精品| 亚洲一区二区三区四区五区黄 | 国产精品一区二区三区久久| 久久香蕉国产线看观看网| 亚洲一区二区三区乱码aⅴ蜜桃女| 免费久久精品视频| 欧美一区午夜精品| 午夜欧美不卡精品aaaaa| 中日韩午夜理伦电影免费| 亚洲深夜激情| 久久爱另类一区二区小说| 亚洲一区二区三区成人在线视频精品| 亚洲成色999久久网站| 国产一区二区三区在线观看网站| 国产精品高清一区二区三区| 欧美午夜无遮挡| 国产麻豆日韩欧美久久| 国产老女人精品毛片久久| 国产精品久久久久久久久免费樱桃 | 亚洲主播在线| 久久久久一本一区二区青青蜜月| 免费精品99久久国产综合精品| 一区二区亚洲| 狠狠色丁香久久婷婷综合丁香 | 久久久久久网址| 欧美日韩亚洲成人| 国产三级精品在线不卡| 亚洲国产合集| 欧美亚洲日本国产| 亚洲国产精品久久久久秋霞不卡| 亚洲精品激情| 欧美本精品男人aⅴ天堂| 夜夜嗨av一区二区三区网站四季av| 亚洲精品中文字| 久久久久一区| 国产一区二区视频在线观看 | 欧美一区二区三区婷婷月色 | 欧美精品激情| 亚洲电影免费观看高清完整版在线| 亚洲欧美日韩人成在线播放| 亚洲黄色精品| 欧美精品午夜视频| 亚洲人人精品| 夜夜嗨网站十八久久| 欧美经典一区二区三区| 在线午夜精品| 亚洲欧美国产高清va在线播| 午夜精品视频一区| 欧美在线三级| 国产精品v欧美精品v日本精品动漫| 欧美色视频在线| 亚洲欧美日韩国产| 亚洲欧美另类综合偷拍| 在线免费观看视频一区| 亚洲激情视频| 欧美午夜片欧美片在线观看| 亚洲午夜精品17c| 亚洲综合国产| 亚洲精品视频在线观看网站| 最新日韩在线| 欧美激情一区二区三区高清视频| 免费在线国产精品| 亚洲淫性视频| 欧美激情国产日韩| 欧美亚洲网站| 欧美日韩国产精品一卡| 欧美寡妇偷汉性猛交| 国产精品久久久久久久久久久久久久 | 久久另类ts人妖一区二区| 性欧美18~19sex高清播放| 久久精品夜夜夜夜久久| 99视频一区二区| 欧美精品三级在线观看| 欧美v亚洲v综合ⅴ国产v| 欧美另类videos死尸| 欧美亚洲一区二区在线观看| 鲁大师成人一区二区三区| 午夜视频精品| 欧美三级特黄| 亚洲国产高清一区| 亚洲精品国产无天堂网2021| 欧美在线免费观看亚洲| 欧美在线观看视频一区二区| 国产精品久久久久久一区二区三区 | 亚洲最快最全在线视频| 欧美精品尤物在线| 亚洲欧美日韩在线高清直播| 性欧美在线看片a免费观看| 欧美视频在线播放| 亚洲欧美日韩国产精品| 久久久国产精品一区二区三区| 国产视频一区在线| 欧美一区亚洲二区| 久久综合久色欧美综合狠狠| 国外视频精品毛片| 免费日韩av电影| 欧美aaa级| 亚洲精品国产精品国自产观看 | 欧美黑人国产人伦爽爽爽| 狠狠色综合网| 美女啪啪无遮挡免费久久网站| 亚洲国产高清高潮精品美女| 亚洲一二三区精品| 黄色在线一区| 国产精品a久久久久久| 麻豆av一区二区三区久久| 亚洲午夜精品一区二区| 免费人成精品欧美精品| 欧美中文字幕视频| 午夜精品视频在线观看| 中国日韩欧美久久久久久久久| 欧美午夜大胆人体| 欧美日韩另类字幕中文| 免费观看日韩| 久久亚洲一区| 久久综合一区二区| 美女精品网站| 麻豆精品视频在线观看| 久久久噜久噜久久综合| 欧美专区在线观看一区| 久久久综合网| 久久三级视频| 欧美老女人xx| 欧美肉体xxxx裸体137大胆| 国产精品久久久久高潮| 国产精品一香蕉国产线看观看| 欧美午夜无遮挡| 国产一区二区三区久久久| 黄色成人在线观看| 亚洲乱亚洲高清| 欧美一区深夜视频|