C++

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

2021-07-17  本文已影响0人  applecai

一,前言

今天我想到一个应用,就是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适配器,哈哈~

上一篇下一篇

猜你喜欢

热点阅读