Python掉用Qt/C++接口

1 篇文章 0 订阅

Python调用C++接口

最近有这么一个需求,需要用Python对开发的应用做二次开发。这可难坏我了,之前也没有相关的经验,网上的资料也比较少。后来深度思考了下,这个问题本质上就是用python调用C++的接口。只要把C++的管理接口封装好,暴露给python,就可以达到我的需求了。

所以,问题就聚焦到了如何用C++调用python 即是我们今天的主题。

C++调用python的思路

现在Python也有很多版本,底层语言也有jave实现的,也有C实现的,但是为我们大众用得比较多的还是 CPython,就是底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,CPython优点是运行速度非常快。

嗯?底层是C语言实现的,那不是可以直接调用C的接口。那直接把C++的接口暴露为C接口是不是直接可以给Python调用呢?于是顺着这个思路往下延伸,得到了答案。

第一步:

把C++的接口声明为C接口。

第二步:

python加载C++的动态库。

对的就俩步。

代码如下:

C++:

extern "C" __declspec(dllexport)
class  GuiLib
{
public:
    explicit  GuiLib();
    void debug()
    {
        std::cout << "debug" << std::endl;
    }
};

extern "C" __declspec(dllexport)
void callCpp()
{
   GuiLib lib;
   lib.debug();
}

python:

from ctypes import *

application = CDLL("./GuiLib.dll")


application.callCpp()

图片如下: 

 

Python调用Qt/C++库

其实也差不多,只不过QWidget show的时候,界面需要持续显示就需要有事件循环,即是QApplication;

C++代码如下:

class Widget : public QWidget
{
public:
     Widget(){}
     ~Widget(){}

};



extern "C" __declspec(dllexport)
int widgetShow()
{
    int argc = 1;
    const char *arg = "11";
    char **argv = const_cast<char **> (&arg);
    QApplication app(argc, argv);
    Widget widget;
    widget.show();
    return app.exec();
}

Python代码如下:

# This Python file uses the following encoding: utf-8
from ctypes import *

application = CDLL("./GuiLib.dll")


application.widgetShow()

实际的调用效果如下:

 

结尾总结

如果C++软件用Python的二次开发上面不妨是个好思路,把软件的必要接口暴露为C接口,然后Python直接load相关动态库就是可直接调用了。是不是很简单。

这个只是我的一个简单思路,如果有大佬有更好的思路欢迎留言。

Demo 地址: https://download.csdn.net/download/Mario_z/16110678

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值