24小时热门版块排行榜    

查看: 127  |  回复: 0
当前主题已经存档。

zsglly

木虫 (著名写手)

[交流] 在VC编写的DLL中导出C++类

如何在VC中导出类,这是一个常有人问起的问题,下面我以一个简单的例子来说明这个问题:  

首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL。由于该类会被工程之外的文件所引用,所以需要对这个类进行引出。因为只有引出后所生成的DLL中才带有供足够的信息以在连接和运行时被正确引入到进程空间中。有两种方法可以引出类,使用__declspec(dllexport)定义和使用定义文件。  

下面先讲使用__declspec(dllexport)的方法:将类定义改为:class __declspec(dllexport) CInDLL 就可以了。(译者:你也许不相信会有这么简单,我也不相信。:-) 这样产生的工程在编译时是正确的但是在使用时会产生错误,因为你包含的头文件中也是使用__declspec(dllexport),而使用这个DLL的工程中并没有引出这个类,而是需要引入这个类)在使用时需要将类定义改为class __declspec(dllimport) CInDLL就可以了。  

使用定义文件可以有效的避免这个问题,这种方法是利用宏定义在不同的地方产生不同的编译代码:在头文件中加入如下的代码:

#ifdef _CLASSINDLL
   #define CLASSINDLL_CLASS_DECL     __declspec(dllexport)
#else
   #define CLASSINDLL_CLASS_DECL     __declspec(dllimport)
#endif

#endif // ClassInDLL_H
//将class __declspec(dllexport) CInDLL改为
class CLASSINDLL_CLASS_DECL CInDLL
{
CInDLL();
...
}

在实现这个类的CPP文件的顶部加入#define _CLASSINDLL语句。  
#define _CLASSINDLL
CInDLL::CInDLL()
{
}
...


这样一来在使用这个类时就可以不做任何改动了。

(译者:这中方法在没有使用MFC时可以使用,如果你使用MFC生成MFC DLL那么只要做如下定义就可以了class AFX_EXT_CLASS yourClass)

[ Last edited by 幻影无痕 on 2006-11-17 at 08:27 ]
回复此楼

» 猜你喜欢

做人要厚道啊!厚道啊!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zsglly 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 资源与环境 调剂申请(333分) +7 holy J 2026-03-21 7/350 2026-03-24 17:24 by xiaohai104
[考研] 306求0703调剂一志愿华中师范 +10 纸鱼ly 2026-03-21 11/550 2026-03-24 17:22 by qingfeng258
[考研] 070300化学求调剂 +9 苑豆豆 2026-03-20 9/450 2026-03-24 17:15 by licg0208
[考研] 085404电子信息284分求调剂 +4 13659058978 2026-03-24 4/200 2026-03-24 12:15 by syl20081243
[考研] 一志愿哈工大,085400,320,求调剂 +3 gdlf9999 2026-03-24 3/150 2026-03-24 10:08 by 搏击518
[考研] 328求调剂 +4 LHHL66 2026-03-23 4/200 2026-03-23 14:55 by lbsjt
[考研] 317求调剂 +12 申子申申 2026-03-19 18/900 2026-03-22 22:23 by luoyongfeng
[考研] 287求调剂 +8 晨昏线与星海 2026-03-19 9/450 2026-03-22 17:01 by i_cooler
[考研] 一志愿中南化学(0703)总分337求调剂 +9 niko- 2026-03-19 10/500 2026-03-22 16:08 by ColorlessPI
[考研] 材料求调剂 +5 @taotao 2026-03-21 5/250 2026-03-21 20:55 by lbsjt
[考研] 297求调剂 +11 戏精丹丹丹 2026-03-17 12/600 2026-03-21 17:47 by ColorlessPI
[考研] 336求调剂 +5 rmc8866 2026-03-21 5/250 2026-03-21 17:24 by 学员8dgXkO
[考研] 299求调剂 +5 shxchem 2026-03-20 7/350 2026-03-21 17:09 by ColorlessPI
[考研] 266求调剂 +3 哇呼哼呼哼 2026-03-20 3/150 2026-03-21 16:46 by barlinike
[考研] 330求调剂0854 +3 assdll 2026-03-21 3/150 2026-03-21 13:01 by 搏击518
[考研] 华东师范大学-071000生物学-293分-求调剂 +3 研究生何瑶明 2026-03-18 3/150 2026-03-21 01:30 by JourneyLucky
[考研] 304求调剂 +6 曼殊2266 2026-03-18 6/300 2026-03-21 00:32 by JourneyLucky
[考研] 22408 344分 求调剂 一志愿 华电计算机技术 +4 solanXXX 2026-03-20 4/200 2026-03-20 23:49 by alg094825
[考研] 321求调剂 +9 何润采123 2026-03-18 11/550 2026-03-20 23:19 by JourneyLucky
[考研] 一志愿西安交通大学 学硕 354求调剂211或者双一流 +3 我想要读研究生 2026-03-20 3/150 2026-03-20 20:13 by JourneyLucky
信息提示
请填处理意见