名 Assembly Machine Codeand Source生成机器码、源代码和汇编代码文件.cod扩展名。
Listing file name为生成的信息文件的路径一般为Debug或Release目录下生成的文件名自动取源文件的文件名。
Optimizations种类选项卡 1.Optimizations 代码优化设置。
可以选择Maximize Speed生成最快速的代码或Minimize Size生成最小尺寸的程序或者Customize定制优化。
定制的内容包括 Assume No Aliasing不使用别名提高速度 Assume Aliasing Across Function Calls仅函数内部不使用别名 Global Optimizations全局优化比如经常用到的变量使用寄存器保存或者循环内的计算优化如 i -100 while i lt 0 i x y 会被优化为 i -100 t x y while i lt 0 i t Generate Intrinsic Functions使用内部函数替换一些函数调用提高速度 Improve Float Consistency浮点运算方面的优化 Favor Small Code程序exe或dll尺寸优化优先于代码速度优化 Favor Fast Code程序exe或dll代码速度优化优先于尺寸优化 Frame-Pointer Omission不使用帧指针以提高函数调用速度 Full Optimization组合了几种参数以生成最快的程序代码。
2.Inline function expansion 内联函数扩展的三种优化使用内联可以节省函数调用的开销加快程序速度 Disable不使用内联 Only __inline仅函数定义前有inline或__inline标记使用内联 Any Suitable除了inline或__inline标记的函数外编译器“觉得”应该使用内联的函数都使用内联。
Precompiled Headers种类选项卡 预编译头文件的设置。
使用预编译可以提高重复编译的速度。
VC一般将一些公共的、不大变动的头文件比如afxwin.h等集中放到stdafx.h中这一部分代码就不必每次都重新编译除非是Rebuild All。
Preprocessor种类选项卡 预编译处理。
可以定义/解除定义一些常量。
Additional include directories可以指定额外的包含目录一般是相对于本项目的目录如..Include。
【Link】 设置连接的选项可以设置生成的文件路径、文件名连接的库文件。
Genaral种类选项卡 设置界面如下图所示 1.Output file name 输出文件名称支持相对路径 2.Object/library module 工程所需要的lib默认当前路径 3.Generate debug info 产生debug信息。
生成Debug信息到.pdb文件具体格式可以在Category-gtDebug中设置Debug默认为trueRelease默认为false 4.Ignore All Default Libraries 放弃所有默认的库连接 5.Link incrementally 增量连接必须选择Program database选项提高编译连接的速度通过生成. ILK文件实现递增式连接以提高后续连接速度但一般这种方式下生成的文件EXE或DLL较大 6.Generate Mapfile 生成.map文件记录模块相关信息 7.Enable profiling 允许程序以profiling启动可以测试程序的效率等 Customize种类选项卡 这里可以进行使用程序数据库文件的设置。
1.Use program database允许使用程序数据库这样连接器会把调试信息放在程序数据库中如果不选中该选项那么也不能使用递增连接方式 2.Force File Output 强制产生输出文件EXE或DLL 即使某个模块引用了一些未定义或者重复定义的符号连接器仍然会强制但不一定能正确运行产生输出文件EXE或DLL 3.Print Progress Messages 可以将连接过程中的进度信息输出到Output窗口 Debug种类选项卡 设置是否生成调试信息以及调试信息的格式。
格式可以有Microsoft Format、COFF FormatCommon Object File Format和Both Formats三种选择Separate Types表示将Debug格式信息以独立的.pdb文件存放还是直接放在各个源文件的.pdb文件中。
选中的话表示采用后者的方式这种方式调试启动比较快。
Input种类选项卡 这里可以指定要连接的库文件放弃连接的库文件。
还可以增加额外的库文件目录一般是相对于本项目的目录如..Lib。
Force Symbol References可以指定连接特定符号定义的库。
Output种类选项卡 1.Base Address 可以改变程序默认的基地址EXE文件默认为0x400000DLL默认为0x10000000操作系统装载一个程序时总是试着先从这个基地址开始 2.Entry-Point Symbol 可以指定程序的入口地址一般为一个函数名且必须采用__stdcall调用约定。
一般Win32的程序EXE的入口为WinMainDLL的入口为DllEntryPoint最好让连接器自动设置程序的入口点。
默认情况下通过一个C的运行时库函数来实现控制台程序采用mainCRTStartup 或wmainCRTStartup去调用程序的main 或wmain函数Windows程序采用WinMainCRTStartup 或 wWinMainCRTStartup调用程序的WinMain 或 wWinMain必须采用__stdcall调用约定DLL采用_DllMainCRTStartup调用DllMain函数必须采用__stdcall调用约定 3.Stack allocations 用以设置程序使用的堆栈大小请使用十进制默认为1兆字节。
4.Version Information 告诉连接器在EXE或DLL文件的开始部分放上版本号 值得注意的是上面各个参数是大小写敏感的在参数后加上“-”表示该参数无效各个参数值选项有“”的表示为该参数的默认值可以使用页右上角的“Reset”按钮来恢复该页的所有默认设置。
【Browse Info】 在这个选项卡中我们可以指定是否在建立工程的同时也生成浏览信息文件有了这个文件后我们就能够在文本编辑器中通过关联菜单的相应命令快速定位到某个符号的定义或引用的地方。
【Pre-link Step】 连接前的步骤可以在工程连接前完成一些工作方式以dos命令行执行通常拷贝lib。
【Post-build step】 这个选项卡用于添加在工程建立完毕之后要执行的命令 如 “copy debugTestDll.lib C:binTestDll.lib” 并在C盘下建一个bin目录做的事情就是把TestDLL.lib拷贝到C:bin所在的文件夹中。
工程设置实例 一C 调用.lib的方法 1.隐式的加载时链接有三种方法 a.LIB文件直接加入到工程文件列表中 在VC中打开File View一页选中工程名单击鼠标右键然后选中quotAdd Files to Projectquot菜单在弹出的文件对话框中选中要加入DLL的LIB文件。
然后在首先要使用该函数的地方加上该LIB的头文件如include quot..lib.hquot即可没有头文件当然就不用了。
b.设置工程的 Project Settings来加载DLL的LIB文件 打开工程的 Project Settings菜单选中Link然后在Object/library modules下的文本框中输入DLL的LIB文件如you.lib或者lib文件的路径包括文件名。
然后在首先要使用该函数的地方加上该LIB的头文件如include quot..lib.hquot即可没有头文件当然就不用了。
c.通过程序代码的方式 加入预编译指令pragma comment lib quot.libquot这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。
因为在Debug方式下产生的LIB文件是Debug版本如Regd.lib在Release方式下产生的LIB文件是Release版本如Regr.lib。
然后在首先要使用该函数的地方加上该LIB的头文件如include quot..lib.hquot即可没有头文件当然就不用了。
当应用程序对DLL的LIB文件加载后还需要把DLL对应的头文件.h包含到其中在这个头文件中给出了DLL中定义的函数原型然后声明。
2.显式的运行时链接 隐式链接虽然实现较简单但除了必须的.dll文件外还需要DLL的.h文件和.lib文件在那些只提供.dll文件的场合就无法使用而只能采用显式链接的方式。
这种方式通过调用API函数来完成对DLL的加载与卸载能更加有效地使用内存在编写大型应用程序时往往采用此方式。
这种方法编程具体实现步骤如下 使用Windows API函数Load Library或者MFC提供的AfxLoadLibrary将DLL模块映像到进程的内存空间对DLL模块进行动态加载。
使用GetProcAddress函数得到
上一篇:
CG
下一篇:
老弱者应该怎样安度盛夏?