zoukankan      html  css  js  c++  java
  • MinGW dll导入导出类

    dll不仅可以导入导出函数,还可以导入导出类。这篇文章就来介绍如何将类导入dll中并导出。


    首先我们建立一个名为dll.cpp的文件(又是这种破名字),里面写上:
    #include <iostream>
    using namespace std;
    
    #define EXPORT __declspec(dllexport)
    
    extern "C"{
        class EXPORT CLASS;  //要导入的类
    }
    
    class CLASS{  //类的主体
        public:
            int a,b;
            int A_B();    //成员函数,注意函数的内容不能直接写在这里面,需要在类外面定义
    }; 
    
    //CLASS的成员函数
    int CLASS::A_B(){ return a+b; }
    
    

    现在来把这个代码编译,打开cmd,输入命令 `g++ -c dll.cpp -o dll.o -DBUILDING_DLL=1` ,接着输入 `g++ -shared dll.o -o dll.dll -Wl,--output-def,dll.def,--out-implib,dll.a,--add-stdcall-alias` 来把dll.o编译为dll.dll。
    接下来我们新建一个名为test.cpp的文件,里面写上:
    #include <iostream>
    using namespace std;
    
    #define EXPORT __declspec(dllimport)
    
    extern "C"{
        class EXPORT CLASS;  //要导入的类
    }
    
    class CLASS{  //类的主体
        public:
            int a,b;
            int A_B();
    }; 
    
    int main(){
        CLASS m;
        m.a=m.b=10;
        cout << m.A_B();
        return 0;
    }
    

    输入 g++ -ldll test.cpp -o test.exe 来把刚刚的test.exe编译,同时导入dll.dll。
    运行结果:
    20



    题外话:编译时提示找不到-ldll的解决方案


    部分童鞋在编译上面的代码会出现can't find -ldll的情况,出现这种情况的原因是因为你的dll没有和test.cpp放在一起(假设你的cmd目录已经cd到test.cpp的目录里面了),这种情况下把dll.dll放在test.cpp的目录下就能编译成功,或者将编译命令改为 `g++ -L dll的目录 -ldll test.cpp -o test.exe`。
  • 相关阅读:
    Webx5 label的取值和赋值(div)
    webx5 复选框的显示
    WebX5 Data遍历以及获取数组最后一个元素(更新)
    API集市--分享API
    WebX5 Data判断当前行的值是否改变,以及改变当前行的状态
    WebX5手机GPS定位,无需开启网络
    JS:var 变量=变量 && 变量
    jQuery的ready ()的几种写法
    .net 微信支付(公众号支付)遇到的问题
    .net中的Dictionary字典类的使用方法
  • 原文地址:https://www.cnblogs.com/Return-blog/p/12366005.html
Copyright © 2011-2022 走看看