zoukankan      html  css  js  c++  java
  • Dll中导出导入时巧用条件编译指令共享头文件

    同一个解决方案中,如果要在某个DLL工程中封装一些功能,则存在一个导入导出函数或类的问题,导出要用dllexport,导入时则用dllimport。如果不采用预编译指令,可能需要写两份头文件,一份用dllexport声明函数供dll自己用,另一份则用dllimport声明供dll的客户端(或叫宿主)程序用。

    这样会很不爽,如果改动,就得两个都改,使用条件编译指令,结合适当的宏定义就可以避免这种麻烦。

    1、把如下条件编译指令加在.h文件最前边

    //控制是在Dll中使用,还是在客户端用
    #ifdef _EXPORTING
    #define My_DECLSPEC  __declspec(dllexport) // 导出
    #else
    #define My_DECLSPEC  __declspec(dllimport) // 导入
    #endif

    2、然后用这样的方式在.h中定义函数或类

    class My_DECLSPEC  MyClass
    {
    private:
       int i, j; 

    public: 
       setupI();

       setupj();

    }

    My_DECLSPEC void func1();

    3、在对应的.cpp中最开始增加宏定义就使dll中使用dllexport

    //定义DLL中的导出C++类
    #define _EXPORTING

    4、当把该.h文件发给dll使用者时,他不定义_EXPORTING就会采用dllimport定义。

    这样就达到共享.h文件的目的。

  • 相关阅读:
    tp框架实现ajax
    tp框架的增删改查
    tp框架获取常量信息、方法、命名空间
    tp框架,访问方式、空方法
    tp基础,文件存储路径
    缓存
    CMS系统存储路径
    Smarty模版引擎的原理
    php的empty(),trim(),strlen()方法
    PHP 流程管理
  • 原文地址:https://www.cnblogs.com/flyingfish/p/705593.html
Copyright © 2011-2022 走看看