| 查看: 118 | 回复: 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 ] |
» 猜你喜欢
存款400万可以在学校里躺平吗
已经有15人回复
拟解决的关键科学问题还要不要写
已经有6人回复
Materials Today Chemistry审稿周期
已经有6人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
推荐一本书
已经有13人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复












回复此楼