#pragma comment使用
编程经常碰到,理解的总不是很透彻,在这里查阅资料总结一下!
在编写程序的时候,我们常用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。
#pragma once :
这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,避免文件被重复包含。
#pragma comment :
该 指令的格式:
#pragma comment( comment-type [,"commentstring"] )
该指令将一个注释记录放入一个对象文件或可执行文件中。
       comment-type(注释类型):可以指定为五种预定义的标识符的其中一种。
commentstring是一个提供为comment-type提供附加信息的字符串,
五种预定义的标识符为:
1、compiler:
将编译器的版本号和名称放入目标文件中,本条注释记录将被编译器忽略。
    如果你为该记录类型提供了commentstring参数,编译器将会产生一个警告。 
    例如:#pragma comment( compiler )
2、exestr:
将commentstring参数放入目标文件中,在链接的时候这个字符串将被放入到可执行文件中。
    当操作系统加载可执行文件的时候,该参数字符串不会被加载到内存中.但是,该字符串可以被dumpbin之类的程序查找出并打印出来,你可以用这个标识符将版本号码之类的信息嵌入到可执行文件中!
3、lib:
这是一个非常常用的关键字,用来将一个库文件链接到目标文件中。
常用的lib关键字,可以帮我们连入一个库文件。 
    例如: #pragma comment(lib, "user32.lib") 
            该指令用来将user32.lib库文件加入到本工程中。
4、linker:
将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项,你可以指定/include选项来强制包含某个对象。
例如: 
#pragma comment(linker, "/include:__mySymbol")
你可以在程序中设置下列链接选项
/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) 来声明。
有三种导出定义的方法,按照建议的使用顺序依次为:
- 源代码中的 __declspec(dllexport) 
- .def 文件中的 EXPORTS 语句 
- 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的效果一样
5、user:
将一般的注释信息放入目标文件中,commentstring参数包含注释的文本信息,这个注释记录将被链接器忽略。 
    例如: 
#pragma comment( user, "Compiled on " __DATE__ " at " __TIME__ )
#pragma comment使用的更多相关文章
- pragma comment的使用
		该宏放置一个注释到对象文件或者可执行文件. #pragma comment( comment-type [,"commentstring"] ) comment-type是一个预定 ... 
- pragma comment
		pragma指令简介 在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 下面介绍了一下该指令的一些常用参数,希望对大家有所帮助! 一. mess ... 
- #include 和 #pragma comment 的相对路径起点
		#include 是以当前文件所在路径为当前目录 #pragma comment 是以当前工程所在路径为当前目录 #include "../../../../ThirdParty/Inclu ... 
- #pragma comment(转)
		此文转自微软MSDN.注意这是在Windows上才有的,Linux上可没有. #pragma comment( comment-type [,"commentstring"] ) ... 
- pragma comment的使用 pragma预处理指令详解
		pragma comment的使用 pragma预处理指令详解 #pragma comment( comment-type [,"commentstring"] ) 该宏放置一 ... 
- pragma comment的使用(转)
		#pragma 的使用 尽管 C 和 C++ 都已经有标准,但是几乎每个编译器 (广义,包含连接器等) 扩展一些 C/C++ 关键字. 合理地应用这些关键字,有时候能使我们的工作非常方便.下面随便说说 ... 
- 关于#pragma comment
		#pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"ws2_32.lib")表示连接Ws2_32.li ... 
- Additinal Dependencies和#pragma comment(lib,"*.lib")的分析
		网上.一些书上也写道,这两种方式作用一样.其实仔细分析,它们两者还是有非常大的差异的. Additinal Dependencies和#pragma comment(lib,"*.lib& ... 
- lib包含# #pragma comment
		#pragma comment(lib,"d2d1.lib")#pragma comment(lib,"dwrite.lib")#pragma comment( ... 
随机推荐
- javascript留言板
			用DOM相关方法创建的留言板 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style> ... 
- BestCoder Round #35
			A 题意:给出n个黑球,m个白球,每次取1个球,取了n+m次以后,会生成一个随机的01串S, 如果第i次取出的是黑球,则s[i]=1,如果是白色的,那么s[i]=0, 问01串在S中出现的期望次数 大 ... 
- WIN7开无线
			可以的,WIN7自身就带有这个功能的,不过默认是不开启的,也可以下载一个软件来弄.1.请却仍您使用的操作系统是微软的Windows 7或者Windows server 2008 R2,正版盗版皆可.( ... 
- RTP封装h264
			网络抽象层单元类型 (NALU): NALU头由一个字节组成,它的语法如下: +---------------+ |0|1|2|3|4|5|6|7| +-+-+-+-+-+-+-+ ... 
- liux之sed用法
			sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ... 
- 【转】c++内存泄露检测,长文慎入!
			原文网址:http://blog.csdn.net/zengraoli/article/details/8905334 关于内存泄露的,今天无意想到,网上找了一下 本篇blog附带的所有工具和代码 ... 
- Java应用调优指南之-工具篇
			1. 土法调优两大件 先忆苦思甜,一般人在没有Profile工具的时候,调优的两大件,无非Heap Dump 与 Thread Dump. 1.1 Heap Dump jmap -dump:live, ... 
- Android启动activity的4种模式(standard、singleTop、singleTask、singleINstance)
			在AndroidManifest.xml中配置activity时,android:launchMode属性会指定启动activity的模式,有四种: standard singleTop single ... 
- web自动化框架之一介绍与环境搭建(Selenium+Eclipse+Python)
			看到一篇环境搭建文章,详细又全面,这里就不一一重复了 http://blog.csdn.net/dyllove98/article/details/9390649 其它: 1.框架介绍 整个 ... 
- 树-哈夫曼树(Huffman Tree)
			概述 哈夫曼树:树的带权路径长度达到最小. 构造规则 1. 将w1.w2.-,wn看成是有n 棵树的森林(每棵树仅有一个结点): 2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左. ... 
