模块定义文件是一个有着.def文件扩展名的文本文件。它被用于导出一个DLL的函数,和__declspec(dllexport)很相似,但是.def文件并不是Microsoft定义的。一个.def文件中只有两个必需的部分:LIBRARY 和 EXPORTS。让我们并森先看一个基本的.def文件稍后我将解析之。纳蔽衡
LIBRARY dll_tutorial
DESCRIPTION "our simple DLL"
EXPORTS
Add @1
Function @2
第一行,''LIBRARY''是一个必需的部分。它告诉链接器(linker)如何命名你的DLL。下面被标识为''DESCRIPTION''的部分并不是必需的,但是我喜欢把它放进去。该语句将字符串写入 .rdata 节[据 MSDN],它告诉人们谁可能使用这个DLL,这个DLL做什么或它为了什么(存在)。再下面的部分标识为''EXPORTS''是另一个必需的部分;这个部分使得该函数可以被其它应用程序访问到并且它创建一个导入库。当你生成这个项目时,不仅是一洞做个.dll文件被创建,而且一个文件扩展名为.lib的导出库也被创建了。除了前面的部分以外,这里还有其它四个部分标识为:NAME, STACKSIZE, SECTIONS, 和 VERSION。我将不再在本文中涉及这些内容,但是如果你在Internet上搜索,我想你将找到一些东西(译注: MSDN2003上对模板定义文件各部分内容有详尽解释,请参阅)。另外,一个分号()开始一个注解
第二、三行是我写的,我的写法是渣轮根据核心编程第五版的518页的倒数第三段的例子之前的头文件和源文件都没问题。现在编译不了,估计就是这个DEF文件的毛病C/C++ code//头文件 #ifndef AAA #define AAA extern "C" __declspec(dllimport) #endif AAA int s()C/C++ code//源文件 #include #define AAA extern "C" __declspec(dllexport) #include "dll.h" int s() { return 1} C/C++ code//DEF文件 LIBRARY "DLL" EXPORTS s C/C++ code1>------ 已启动生成: 项目: DLL, 配置: Release Win32 ------ 1>正在链接... 1>正在创建库 C:\猜梁咐Users\Administrator\Desktop\DLL\Release\DLL.lib 和对象 C:\Users\Administrator\Desktop\DLL\Release\DLL.exp 1>正在生成代码 1>已完成代码的生成 1>LINK : fatal error LNK1101: MSPDB80.DLL 的版本不正确;请再次检查此产品的安装 1>生成日志保存在“file://c:\Users\Administrator\Desktop\DLL\DLL\Release\BuildLog.htm” 1>DLL - 1 个错误,0 个警告 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== ------解决方案--------------------------------------------------------你的VS是不是出问穗纯题了额系统提示你重新装呢或者其他问题总之不难,你再检查下------解决方案--------------------------------------------------------因为VC\Bin\下没有“msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件,解决的方法:1>直接从Common7\IDE\下复制这四个文件到VC\Bin\下即可解决2>添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;,注意结尾最后用“;”隔开!这样在用cl编译就不会出现mspdb80.dll文件找不到的错误了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)