MinGW dll导入导出类
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导入导出类的更多相关文章
- 实现MFC扩展DLL中导出类和对话框
如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对 ...
- DLL学习笔记一(DLL导入导出)
创建DLL: 先声明导出函数:使用__declspec(dllexport) #include"DLLSample.h" #ifndef _DLL_SAMPLE_H #define ...
- DLL入门浅析(4)——从DLL中导出类
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90663.html 前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小 ...
- VC++导入导出类
一.导出类 VC++中导出类很简单,下面列出了两个等价的方法: 方法1: class __declspec(dllexport) CTest { public: int m_nValue ...
- 不依赖Excel是否安装的Excel导入导出类
本文利用第三方开源库NPOI实现Excel97-2003,Excel2007+的数据导入导出操作. 不依赖Office是否安装.NPOI开源项目地址:http://npoi.codeplex.com/ ...
- dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析
建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...
- .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录
#region 从Excel导入 //用法 //var cellHeader = new Dictionary<string, string>(); //cellHeader.Add(&q ...
- dll导入导出资源文件查看工具 InspectExe
InspectExe lets you explore and diagnose problems with Win32 applications. It is integrated directly ...
- C++ DLL导出类 知识大全
在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架.在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发. 参考了很多这方面的资料,对DLL有一个基本全面的了解.有一个问题 ...
随机推荐
- ADO.NET中的数据库帮助类
ADO.NET是.net framework中的一个重要模块,用于程序和数据源的连接,它的类都位于 System.Data.dll 中. 用于SQLServer的命名空间:System.Data.Sq ...
- jvm gc 调优 实战
非常不错的文章们 转自: 中文:http://blog.csdn.net/dragonassassin/article/details/51010947 http://josh-persistence ...
- python里的复数complex
复数是一个数学概念,包含了实部和虚部.在python设计语言中,可以直接定义以j为单位,也可以使用complex函数创建复数,这个函数可以传实部和虚部,也可以只传实部. 我们把形如z=a+bj(a,b ...
- 用友UAP NC 单据新增数据时抛出"流程平台缓存中不存在该单据或交易类型=HB06"
正常单据新增时,抛出异常"流程平台缓存中不存在该单据或交易类型=HB06"
- Tram POJ - 1847 spfa
#include<iostream> #include<algorithm> #include<queue> #include<cstdio> #inc ...
- SKlearn | 学习总结
1 简介 scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包.它通过NumPy, SciPy和Matplotlib等python数值计算的库实现高效的算法 ...
- Pi和e的积分
Evaluate integral $$\int_{0}^{1}{x^{-x}(1-x)^{x-1}\sin{\pi x}dx}$$ Well,I think we have $$\int_{0}^{ ...
- vue.js 的cdn 链接的引用地址
引用地址有两种一种完整版,一种压缩版效果是一样的 https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js https://cdn.bootcss.com ...
- 论文阅读笔记(四)【TIP2017】:Video-Based Pedestrian Re-Identification by Adaptive Spatio-Temporal Appearance Model
Introduction (1)背景知识: ① 人脸识别是具有高可靠性的生物识别技术,但在低解析度(resolution)和姿态变化下效果很差. ② 步态(gait)是全身行为的生物识别特征,大部分步 ...
- eureka server 单节点与多节点部署演示
环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version ...