zoukankan      html  css  js  c++  java
  • 动态链接库(DLL)编写经验

    我首先说明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 的设计简化的理念。

  • 相关阅读:
    04面向对象编程-01-创建对象 和 原型理解(prototype、__proto__)
    03标准对象-02-RegExp 正则表达式
    03标准对象-01-Date和JSON
    广度优先搜索
    Java虚拟机(三) —— 类加载
    业务开发(一)—— MySQL
    Java并发编程(一) —— Java内存模型JMM
    深度优先搜索
    Spark学习(一)
    清泉白石
  • 原文地址:https://www.cnblogs.com/sgdd123/p/7868367.html
Copyright © 2011-2022 走看看