在VC中导出C++类

2016-02-19 14:25 2 1 收藏

今天图老师小编要跟大家分享在VC中导出C++类,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

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

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

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

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

  #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()  {  }  ...

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

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

来源:https://www.tulaoshi.com/n/20160219/1606938.html

延伸阅读
上两篇内容我们着重说了结构体相关知识的操作。 以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了。 !-- frame contents -- !-- /frame contents -- 前面的教程我已经再三说明,结构体的把握非常重要,重要在哪里呢?重要在结构体和类有相同的特性,但又...
结构体和类有相同的特性,但又有很大的区别,类是构成面向对象编程的基础,但它是和结构体有着机器密切的关系。 我们在c语言中创建一个结构体我们使用如下方法: C++ 代码 //程序作者:管宁   //所有稿件均有版权,如要转载,请务必闻名出处和作者 strUCt test { priva...
在使用C++编程的过程当中,经常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass(){x=0;y=1;} 第二种方法: CSomeClass::CSomeClass() : x(0), y(1){} 本文将要探讨这两种方法的异同以及如何使用这两种方法。     从技术上说,第二种方法比较好,但是在大多数情况下,两者实际上没有什么区...
实现LZARI压缩算法的C++类 作者: 阙荣文(querw) 下载源代码 这是一个基于LZARI算法的数据压缩的类.Haruhiko Okumura 于1989年7月4日用c语言写实现了这个算法.但是上面用到了一些全局或静态的变量,在MFC下用起来很不方便.我把它改写成了一个c++类,使它可以方便的压缩和解压缩,更重要的是,我新增加了两个...
4.9.3 预定义动作类 通过动作列表编辑器可使用自动执行某些通用动作的预定义动作类。 另外,组件编写者以StdActns和DBActns单元中的类为例派生出自己的动作类,用以实现某些特定的控件或组件的行为。特定动作(TEditAction、TWindowAction)的基类通常重载HandlesTarget、UpdateTarget及其他方法来将动作目标限制为特定的对象...

经验教程

63

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部