C++动态链接库封装
封装一个动态连接库的大致步骤
由于我们部门主要是利用MFC开发,所以我简单的做了一个关于MFC规则动态库的创建以及调用的文档,仅供参考。
- 新建MFC DLL项目(命名为NewDll)

2.分别为刚见得项目添加一个名为MyNewClass.h的头文件和一个名为MyNewClass.cpp 的源文件(如下图)

3.分别在头文件中和源文件中 写下如下代码
头文件

源文件

如果这个时候进行编译,那么将会出现如下错误

出现这个错误的原因是由于这个是一个导出文件,由于没有找到宏_MYNEWCLASS_EXPOTR_
解决以上错误的办法是点击 项目->属性->C/C++->预处理器->加上_MYNEWCLASS_EXPOTR_就可以解决问题了,在编译就成功了
下面是关于Dll的调用示范:
- 新建一个MFC应用程序NewDllTest

2.在新建的应用程序的对话框中加入2个按钮,分别为调用类和调用函数

先把前面生成的NewDll.dll和NewDll.lib拷贝到NewDllTest应用程序的目录下
在新建应用程序的源文件NewDllTestDlg.cpp 中先添加进来Dll的头文件,既如下路径

调用类的代码如下

调用函数的代码如下

执行完以上程序步骤后 编译 然后会发现如下错误

此错误出现的原因还是由于不识别函数,由于lib没有导入,有3中解决办法,第一种是在头文件中加上以下导入 #pragma comment(lib,"NewDll.lib") 第二种是在dll声明导入的同时将这句话加入。第3种是不用包含头文件,而去项目属性->链接器->输入->附加依赖项-> NewDll.lib 利用此3中方法后再编译都会编译成功
声明:以上纯属个人总结。如果疑惑请参考相关书籍
C++动态链接库封装的更多相关文章
- WINDOWS动态链接库--MFC规则动态链接库
第一代window程序员使用windows api进行编程,到了后来,微软推出MFC类库,于是,动态链接库进行了升级,可以在动态连接库中使用MFC的API,这就叫做MFC动态链接库, 其中MFC动态链 ...
- 在DLL动态链接库中封装VCL的MDI子窗体
在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下 ...
- WIN32 窗口类封装 框架实现部分
上面已经讲了窗口封装部分,内容可点击:http://www.cnblogs.com/mengdejun/p/4010320.html,下面分享框架部分内容,完成WINDOWS消息迭代 CQFrameW ...
- 如何用c语言调用c++做成的动态链接库
今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用c调用呢,别着急,本文通过一个小小 ...
- 动态链接库(dll)简介(转)
DLL 是 Dynamic Link Library 的缩写,译为“动态链接库”.DLL也是一个被编译过的二进制程序,可以被其他程序调用,但与 exe 不同,DLL不能独立运行,必须由其他程序调用载入 ...
- QTextCodec::makeDecoder函数,plugins需要是动态链接库
QT中的QString内容使用Unicode作为文本编码.但是实际系统中通常采用的是其他编码,例如GBK,utf8等.为了便于兼容这些格式,QT中还设置了两个字符串类型: QCString类: C类型 ...
- C# 封装一个钩子类
利用C#设置钩子函数,并封装成类.如果想要实现全局钩子的话,必须将实现的代码封装到类库里. using System; using System.Collections.Generic; using ...
- 制作C/C++动态链接库(dll)若干注意事项
一.C\C++ 运行时库编译选项简单说明 问题:我的dll别人没法用 运行时库是个很复杂的东西,作为开发过程中dll制作需要了解的一部分,这里主要简单介绍一下如何选择编译选项. 在我们的开发过程中时常 ...
- 在 C# 中加载自己编写的动态链接库
一.发生的背景 在开发新项目中使用了新的语言开发 C# 和新的技术方案 WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用 C 或 C++ 或 Delphi 编写的,如 ...
随机推荐
- java代码审计中的一些常见漏洞及其特征函数
文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...
- gcc 中__thread 关键字的示例代码
__thread 关键字的解释: Thread Local Storage 线程局部存储(tls)是一种机制,通过这一机制分配的变量,每个当前线程有一个该变量的实例. gcc用于实现tls的运行 ...
- Python实现bp神经网络识别MNIST数据集
title: "Python实现bp神经网络识别MNIST数据集" date: 2018-06-18T14:01:49+08:00 tags: [""] cat ...
- Git使用和Vue项目
1.创建git排除文件,.gitignore 2.READEME.md 和 LICENSE开源协议 git init 创建仓库 , git status 查看文件状态 红色文件表示未提交. git ...
- 机器学习算法GBDT
http://www-personal.umich.edu/~jizhu/jizhu/wuke/Friedman-AoS01.pdf https://www.cnblogs.com/bentuwuyi ...
- BeyondCompare使用一段时间后会因“许可证密钥已被撤销:3281-0350“而无法使用
解决方式: 1.用任意文本编辑软件打开“C:\Users\[Your User Name]\AppData\Roaming\Scooter Software\Beyond Compare 3\BCSt ...
- Angular4 投影ngContent
- HTTP请求中GET和POST的区别
一.原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式. HTTP定义了与服务器交互 ...
- v-charts简介
一, v-charts简介 在使用 echarts 生成图表时,经常需要做繁琐的数据类型转化.修改复杂的配置项,v-charts 的出现正是为了解决这个痛点.基于 Vue2.0 和 echarts 封 ...
- Docker+Teamcity+Maven+SVN搭建持续集成环境
这是使用Jenkins作为CI/CD工具,Teamcity的作用是相同的.