以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 用DEF文件从DLL中导出C++类 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=55795) |
-- 作者:卷积内核 -- 发布时间:11/22/2007 8:14:00 AM -- 用DEF文件从DLL中导出C++类 用DEF从DLL导出一个函数,或用__declspec(dllexport)指令从DLL中导出一类,想必大家已经很熟悉了,也经常使用着。这里向大家介绍一种 用DEF文件从DLL导出一个类的方法。具体原理或为什么就不废话了,学会导出后,再慢慢回味吧。这里主要叙述操作步骤。 1。打开VC6.0,新建一个"Win32 Dynamic-Link Library"工程,假设叫DefClass 。 2。新建一个文件,命名为DefClass.def,先暂时输入下面的内容,并加入工程。 LIBRARY DefClass EXPORTS 3。向工程中加入一个类CMath,并添加一个Add方法,使之看起来如下: }; 4。打开工程的设置(settings)界面,选择Link,勾选Generate mapfile。 5。Rebuild all工程。 6。在VC中打开Debug或Release的*.map文件(如果你工程名这DefClass,那就是DelClass.map)。 7。找到Math.obj,比如: 0001:00000080 ??0CMath@@QAE@XZ 10001080 f Math.obj EXPORTS 9。保存所有文件,再执行Rebuild All. 如果一切正常,那你的DLL中的类已经以序号导出的了。这时再往CMath中加函数,如上从map文件中找到函数的标识符,并在def文件中加一项 ,分配一个序号给它。只要保持以前的导出序号不变,用新编译生成的DLL替换先前的DLL,以前的客户程序仍然可以正常运行。 你可以把"Math.h"和"DefClass.lib"拷贝到客户程序的工程目录下,把"DefClass.dll"拷贝到客户程序的输出(debug/release)目录下。 在客户程序中#include "Math.h",在客户程序的settings中加入对DefClass.lib引用。 CMath Math; |
-- 作者:卷积内核 -- 发布时间:11/22/2007 8:16:00 AM -- 用VC工具DUMPBIN.EXE 得到的.def文件 D:\Program Files\Microsoft Visual Studio\VC98\Bin\DUMPBIN.EXE" /EXPORTS user32.dll /OUT:user32.def Tools->customize...->Tools 然后执行Tools菜单下的DUMPBIN就OK啦!
[此贴子已经被作者于2007-11-22 8:51:19编辑过]
|
-- 作者:卷积内核 -- 发布时间:11/22/2007 8:17:00 AM -- 问题: 我在试图做一个dll时,不用def文件不行吗?再一个EXPORTS下面的输出函数还用给它们分别给一个数吗?如: EXPORTS sungo @1 回答: |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
62.500ms |