美文网首页C++
11.python调用QT制作的dll--Apple的学习笔记

11.python调用QT制作的dll--Apple的学习笔记

作者: applecai | 来源:发表于2021-07-17 18:57 被阅读0次

    一,前言

    今天我想到一个应用,就是python控制QT程序,但是这样实现等于python调用exe,感觉少了交互,所以我想到通过python控制c的dll以前用vs2017实现过。那么现在我通过QT生成一个dll让python调用,这样便于共享功能。

    二,需求

    通过QT制作一个c++类,并且通过python调用类及方法

    三,遇到的问题

    1. python不能调用c++的类及其方法?
    答:好像ctypes库只适用于c函数。理解为python只能调用c,就是说用c++的都要extern "c"。那么通过曲线救国的方法,将python的类及方法打包到c函数即可。

    四,实现

    mydll.h

    #ifndef MYDLL_H
    #define MYDLL_H
    
    #include "mydll_global.h"
    
    class MYDLL_EXPORT Mydll
    {
    public:
        Mydll();
        int add(int,int);
    };
    extern "C" MYDLL_EXPORT int getDllTest(int a,int b) ; // 使用类
    #endif // MYDLL_H
    

    mydll.cpp

    #include "mydll.h"
    Mydll::Mydll()
    {
    }
    
    int Mydll::add(int a,int b)
    {
        return (a+b);
    }
    
    MYDLL_EXPORT int getDllTest(int a,int b) {
        Mydll *dll = new Mydll();
        int ret = dll->add(a,b);
        delete dll;
        return(ret);
    }
    

    python调用dll

    import ctypes
    dll = ctypes.cdll.LoadLibrary("./mydll.dll")
    a=dll.getDllTest(1,3)
    print(a)
    

    将dll复制到python文件夹,运行效果,1+3=4,验证正确。

    image.png

    五,小结

    今天主要目的是练习下python调用c++库及其方法,验证其可行性。原来python只能调用c。那么可以将问题转换为c语言如何调用c++类中的方法。解决方法就是添加adapter适配器,哈哈~

    相关文章

      网友评论

        本文标题:11.python调用QT制作的dll--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/yxgwpltx.html