一,前言
今天我想到一个应用,就是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,验证正确。
五,小结
今天主要目的是练习下python调用c++库及其方法,验证其可行性。原来python只能调用c。那么可以将问题转换为c语言如何调用c++类中的方法。解决方法就是添加adapter适配器,哈哈~
网友评论