封装一个动态连接库的大致步骤

由于我们部门主要是利用MFC开发,所以我简单的做了一个关于MFC规则动态库的创建以及调用的文档,仅供参考。

  1. 新建MFC DLL项目(命名为NewDll)

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

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

头文件

源文件

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

出现这个错误的原因是由于这个是一个导出文件,由于没有找到宏_MYNEWCLASS_EXPOTR_

解决以上错误的办法是点击 项目->属性->C/C++->预处理器->加上_MYNEWCLASS_EXPOTR_就可以解决问题了,在编译就成功了

下面是关于Dll的调用示范:

  1. 新建一个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++动态链接库封装的更多相关文章

  1. WINDOWS动态链接库--MFC规则动态链接库

    第一代window程序员使用windows api进行编程,到了后来,微软推出MFC类库,于是,动态链接库进行了升级,可以在动态连接库中使用MFC的API,这就叫做MFC动态链接库, 其中MFC动态链 ...

  2. 在DLL动态链接库中封装VCL的MDI子窗体

    在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下 ...

  3. WIN32 窗口类封装 框架实现部分

    上面已经讲了窗口封装部分,内容可点击:http://www.cnblogs.com/mengdejun/p/4010320.html,下面分享框架部分内容,完成WINDOWS消息迭代 CQFrameW ...

  4. 如何用c语言调用c++做成的动态链接库

    今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用c调用呢,别着急,本文通过一个小小 ...

  5. 动态链接库(dll)简介(转)

    DLL 是 Dynamic Link Library 的缩写,译为“动态链接库”.DLL也是一个被编译过的二进制程序,可以被其他程序调用,但与 exe 不同,DLL不能独立运行,必须由其他程序调用载入 ...

  6. QTextCodec::makeDecoder函数,plugins需要是动态链接库

    QT中的QString内容使用Unicode作为文本编码.但是实际系统中通常采用的是其他编码,例如GBK,utf8等.为了便于兼容这些格式,QT中还设置了两个字符串类型: QCString类: C类型 ...

  7. C# 封装一个钩子类

    利用C#设置钩子函数,并封装成类.如果想要实现全局钩子的话,必须将实现的代码封装到类库里. using System; using System.Collections.Generic; using ...

  8. 制作C/C++动态链接库(dll)若干注意事项

    一.C\C++ 运行时库编译选项简单说明 问题:我的dll别人没法用 运行时库是个很复杂的东西,作为开发过程中dll制作需要了解的一部分,这里主要简单介绍一下如何选择编译选项. 在我们的开发过程中时常 ...

  9. 在 C# 中加载自己编写的动态链接库

    一.发生的背景    在开发新项目中使用了新的语言开发 C# 和新的技术方案 WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用 C 或 C++ 或 Delphi 编写的,如 ...

随机推荐

  1. PL/SQL Block中对单引号进行转义

    可以使用如下的方式: STR := q'[ CREATE TABLE TNAME AS SELECT ... FROM INPUT_TABLE IP WHERE ((IP.DATE_FIELD = T ...

  2. The type com.google.protobuf.GeneratedMessageV3$Builder cannot be resolved. It is indirectly referenced from required .classfiles

    在做项目的时候,导入了几个类,导入了相关的jar. 结果在package处报了The type com.google.protobuf.GeneratedMessageV3$Builder canno ...

  3. pycharm2018安装教程 pycharm2018永久激活教程

    安装教程 下载pycharm 2018.3.2安装文件,可以直接点击下载网盘下载 激活码地址:http://demo.liuy88.cn/jp0876.html 下载完成后,双击exe即可开始安装 点 ...

  4. postman+newman+jenkins 接口自动化问题

    声明:个人原创,转载请注明 1.安装postman工具 下载地址:https://www.getpostman.com/点击下载,选择自己的系统,我的是windows系统,64位 2.postman ...

  5. Django的安装和一些操作

    1.安装 (1) 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 (2) pycharm setting —> ...

  6. php伪造ip头

    <? $fp = fsockopen ("passport.baidu.com", 80, $errno, $errstr, 30); if (!$fp) { echo &q ...

  7. dataguard从库移动数据文件

    ------------方法1从库移动数据文件路径方法1--------------将表空间offline的方法不行 1.退出日志应用alter database recover managed st ...

  8. D9 图论综合题

    1.白银莲花池 LUOGU 2411 第一种思路:当然我们可以写三个bfs a掉这个题,这写下来一二百行要有了吧: 第二种:我们可以在一个bfs中维护所有的信息,一个方向数组,从起点开始,向八个方向扩 ...

  9. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...

  10. eclipse中出现An internal error occurred during: "Initializing Java Tooling"

    关于这个问题我查了一下,就是删除.projct文件夹下的文件. 自己试了一下,这个可以及解决问题可是会出现新的问题. 1.SVN关联没了,这样做你的svn信息都没了,项目还要重新导一遍 2.出现了新的 ...