dll不仅可以导入导出函数,还可以导入导出类。这篇文章就来介绍如何将类导入dll中并导出。

首先我们建立一个名为dll.cpp的文件(又是这种破名字),里面写上:

#include <iostream>
using namespace std; #define EXPORT __declspec(dllexport) extern "C"{
class EXPORT CLASS; //要导入的类
} class CLASS{ //类的主体
public:
int a,b;
int A_B(); //成员函数,注意函数的内容不能直接写在这里面,需要在类外面定义
}; //CLASS的成员函数
int CLASS::A_B(){ return a+b; }

现在来把这个代码编译,打开cmd,输入命令 `g++ -c dll.cpp -o dll.o -DBUILDING_DLL=1` ,接着输入 `g++ -shared dll.o -o dll.dll -Wl,--output-def,dll.def,--out-implib,dll.a,--add-stdcall-alias` 来把dll.o编译为dll.dll。

接下来我们新建一个名为test.cpp的文件,里面写上:

#include <iostream>
using namespace std; #define EXPORT __declspec(dllimport) extern "C"{
class EXPORT CLASS; //要导入的类
} class CLASS{ //类的主体
public:
int a,b;
int A_B();
}; int main(){
CLASS m;
m.a=m.b=10;
cout << m.A_B();
return 0;
}

输入 g++ -ldll test.cpp -o test.exe 来把刚刚的test.exe编译,同时导入dll.dll。

运行结果:

20

题外话:编译时提示找不到-ldll的解决方案

部分童鞋在编译上面的代码会出现can't find -ldll的情况,出现这种情况的原因是因为你的dll没有和test.cpp放在一起(假设你的cmd目录已经cd到test.cpp的目录里面了),这种情况下把dll.dll放在test.cpp的目录下就能编译成功,或者将编译命令改为 `g++ -L dll的目录 -ldll test.cpp -o test.exe`。

MinGW dll导入导出类的更多相关文章

  1. 实现MFC扩展DLL中导出类和对话框

    如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对 ...

  2. DLL学习笔记一(DLL导入导出)

    创建DLL: 先声明导出函数:使用__declspec(dllexport) #include"DLLSample.h" #ifndef _DLL_SAMPLE_H #define ...

  3. DLL入门浅析(4)——从DLL中导出类

    转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90663.html 前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小 ...

  4. VC++导入导出类

    一.导出类 VC++中导出类很简单,下面列出了两个等价的方法: 方法1: class __declspec(dllexport) CTest { public: int        m_nValue ...

  5. 不依赖Excel是否安装的Excel导入导出类

    本文利用第三方开源库NPOI实现Excel97-2003,Excel2007+的数据导入导出操作. 不依赖Office是否安装.NPOI开源项目地址:http://npoi.codeplex.com/ ...

  6. dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析

    建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...

  7. .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录

    #region 从Excel导入 //用法 //var cellHeader = new Dictionary<string, string>(); //cellHeader.Add(&q ...

  8. dll导入导出资源文件查看工具 InspectExe

    InspectExe lets you explore and diagnose problems with Win32 applications. It is integrated directly ...

  9. C++ DLL导出类 知识大全

    在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架.在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发. 参考了很多这方面的资料,对DLL有一个基本全面的了解.有一个问题 ...

随机推荐

  1. VS中关于数据库的操作

    1.数据库迁移 第一步: 第二步: 在窗口中选择项目中的EntitiyFramwork项目(与数据库连接的文件集) 第三步: 输入update-database 二:数据对比 第一步: 第二步:选择需 ...

  2. 小白月赛22 J : 计算 A + B

    J:计算 A + B 考察点 : 高精度,字符串 坑点 : 字符串中可能全是数字,或者 + 超过 1 个,需要进行特殊判断 析题得侃: 关于高精度的各种板子 Code: #include <ve ...

  3. java学习笔记之IO编程—打印流和BufferedReader

    1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...

  4. yii2 钩子函数

    插入时间 public function beforeSave($insert) { $this->created_at=time(); return parent::beforeSave($i ...

  5. JavaScript 继承 -JavaScript高级程序设计

    oo(Object Oriented)面向对象 许多oo语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.函数没有签名,在ecmascript中无法实现接 ...

  6. 对one hot 编码的理解,sklearn. preprocessing.OneHotEncoder()如何进行fit()的?

    查阅了很多资料,逐渐知道了one hot 的编码,但是始终没理解sklearn. preprocessing.OneHotEncoder()如何进行fit()的?自己琢磨了一下,后来终于明白是怎么回事 ...

  7. 数据预处理 | python 第三方库 imblearn 处理样本分布不均衡问题

    说明:目前 只记录了 过采样 和 欠采样 的代码部分 1 样本分布不均衡描述: 主要出现在与分类相关的建模问题上,不均衡指的是不同类别的样本量差异非常大. 样本量差距过大会影响到建模结果 2 出现的场 ...

  8. Java基本语法--控制台输入(Scanner类)

    通过Scanner类获取用户输入时,控制台会一直等待用户的输入,可以输入不同类型的值.本篇博客主要讲解从控制台输入值,即Scanner类的使用方法. Api文档中关于Scanner类的构造方法 键盘输 ...

  9. Sublime Text(代码编辑软件)

    特点 Sublime Text 3是一个轻量.简洁.高效.跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点: 它体积小巧,无需安装,绿色便携:它可跨平台支持Windows/Mac/Linux: ...

  10. 金蝶云星空使用WebAPI来新增单据

    有很多客户需求在后台自动生成某张单据,金蝶云星空提供了WebApi,包含了保存,提交,审核,删除单据的接口,下面以生产订单的保存,提交,审核为例,说明一下应用WebApi后台自动生成生产订单的功能,下 ...