我首先说明DLL的生成方法,之后再补充一些特殊之处。

生成方法:

1.对需要导出的类,在头文件中添加

#ifdef CLASS _API
#define CLASS_API _declspec(dllexport )
#else
#define CLASS_API _declspec(dllimport )
#endif

2.在其cpp文件中添加

#define CLASS_API _declspec(dllexport )

注意这条语句一定要放在头文件链接的前面

3.在类声明添加 CLASS_API,如:

class CLASS_API Class1

添加完以上编译命令后运行得到的文件在debug文件夹中,但注意有用的是后缀名为dll与lib的两个文件,以及类的头文件。将这三个文件拷贝在需要使用该动态链接库的目录下。然后在解决方案中添加lib文件和头文件,dll文件只需要拷贝在工程目录下而并不需要添加在解决方案中。然后直接调用就可以。

再补充说明一些特殊的地方:

1.一个动态链接库可以同时导出多个类,但注意每个类都要按照以上的生成方法处理。当然在使用时每个类的头文件也都要拷贝在工程目录之下;

2.根据实验dll文件的生成必须在win32控制台应用程序的DLL项目中,单纯的控制台应用程序即使添加了上述代码也不能生成dll文件,只是多生成了lib文件。而没有dll文件是无法运行

3.一旦选择了dll链接库项目,至于类声明是_declspec (dllexport )还是_declspec (dllimport ),似乎并没有影响,运行结果一致且都成功。按理说类声明在编写时应该为_declspec (dllexport ) 。但可能是项目本身的编译设置忽略的这点差异,只要类是声明为dll相关的都会导出到dll文件中。当然如果两个声明语句都没有自然是无法导出的。

4.在多个类嵌套的情况下要特别注意最终导出的类的封装。例如最终要导出的类继承了其他的类,或者调用了其他的类的方法。这些都是可以的,只是在头文件的声明中不要出现相关的类名。而是一定要完整的封装在底层。否则,在将头文件拷贝至工程目录下时就会出现“标识符未定义”的错误。这样就必须调用相关的头文件,这样就违背了dll 的设计简化的理念。

动态链接库(DLL)编写经验的更多相关文章

  1. VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性

    转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...

  2. BCB如何编写,调用动态链接库DLL

    一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...

  3. VS2010编写动态链接库DLL和单元测试,转让DLL测试的正确性

    本文将创建一个简单的动态库-link,谱写控制台应用程序使用该动态链接库,该动态链接库为"JAVA调用动态链接库DLL之JNative学习"中使用的DLL,仅仅是项目及文件名不同. ...

  4. VC++动态链接库(DLL)编程深入浅出(zz)

    VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...

  5. LR调用动态链接库DLL

    什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...

  6. Windows动态链接库DLL

    1.什么是DLLDLL,即动态链接库,是包含若干个函数的库文件,可供其他程序运行时调用. 2.DLL的优缺点优点:代码重用,可供多个程序同时调用 缺点:易发生版本冲突当新版本的动态链接库不兼容旧版本时 ...

  7. DLL编写教程(绝对经典之作)

    DLL编写教程 半年不能上网,最近网络终于通了,终于可以更新博客了,写点什么呢?决定最近写一个编程技术系列,其内容是一些通用的编程技术.例如DLL,COM,Socket,多线程等等.这些技术的特点就是 ...

  8. 动态链接库 DLL

    动态链接库DLL 不使用时不会有任何作用,只有在其他模块调用动态链接库中的函数时,它才发挥作用. 一.静态库与动态库 1.静态库 函数和数据被编译进一个二进制文件(.LIB),编译时,会将其组合起来创 ...

  9. 动态链接库dll,静态链接库lib, 导入库lib

    转载地址:http://www.cnblogs.com/chio/archive/2008/08/05/1261296.html 目前以lib后缀的库有两种,一种为静态链接库(Static Libar ...

  10. 动态链接库dll,导入库lib,静态链接库lib

    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...

随机推荐

  1. 如何在yarn上运行Hello World(二)

      在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster ...

  2. 表单Checkbox全选反选全不选

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. jQuery实现表的编辑删除添加(增删改查)🌚

    代码 : (用到了bootstrap里面的全局css样式和组件,毕竟一把梭.

  4. thinkinginjava学习笔记10_容器

    Java中并没有像Perl.Python.Ruby那样对容器有直接的支持,但是可以依靠容器类来完成相同的工作: 泛型 使用一个ArrayList对象可以保存一系列的对象,如: ArrayList ap ...

  5. SQLServer:无法生成 SSPI 上下文(Cannot generate SSPI context)

    服务器版本:windows Server 2012 R2 数据库版本: SQLServer 2016 +sp1 SQL2016AlwaysOn群集: 由于重启过域控,造成后续的部分服务器也解析不到DN ...

  6. python字符集的转换(mysql数据乱码的处理)

    本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535 chardet模块:http://blog.csdn.net/tianz ...

  7. 使用dropwizard(4)-加入测试-jacoco代码覆盖率

    前言 dropwizard提供了一个简单的测试框架.这里简单集成并加入jacoco测试. Demo source https://github.com/Ryan-Miao/l4dropwizard 本 ...

  8. c/c++ 贪吃蛇控制台版

    贪吃蛇控制台版(操作系统win7 64位:编译环境gcc, vs2017通过,其它环境未测试 不保证一定通过) 运行效果: #include <iomanip> #include < ...

  9. poi 读取word文档

    1.导入jar包 官网下载地址: https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.zip 最开始 ...

  10. Chris Richardson微服务翻译:构建微服务之使用API网关

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...