Python调用C++样例

前言

在项目开发中,因为某些原因,需要使用C++开源库,所以在网上和chatGPT上搜罗了一番教程。按照chatGPT DEMO,在微调后,成功运行,特记录过程。

开发准备

开发环境说明:python3.9.13
必须的python包:cython,安装命令pip install cython
开发工具:pycharm
操作系统:windows10

操作步骤

1.新建myclass.h文件

class MyClass {
public:
    MyClass(int value);
    int getValue();
private:
    int data;
};

2.新建myclass.cpp文件

#include "myclass.h"

MyClass::MyClass(int value) : data(value) {}

int MyClass::getValue() {
    return data;
}

3.新建myclass_wrapper.pyx文件

# myclass_wrapper.pyx
# cython: language_level=3
import ctypes

cdef extern from "myclass.h":
    cdef cppclass MyClass:
        MyClass(int value)
        int getValue()

cdef class PyMyClass:
    cdef MyClass *thisptr

    def __cinit__(self, int value):
        self.thisptr = new MyClass(value)

    def __dealloc__(self):
        del self.thisptr

    def get_value(self):
        return self.thisptr.getValue()

4.新建setup.py文件

from setuptools import setup
from distutils.extension import Extension
from Cython.Build import cythonize

extensions = [
    Extension(
"myclass_wrapper",
        sources=["myclass_wrapper.pyx", "./myclass.cpp"],
        language="c++",
        extra_compile_args=['/std:c++latest']
    )
]

setup(
    ext_modules=cythonize(extensions),
)

5.编译

 python setup.py build_ext --inplace

以上操作均在同一目录下完成,操作完成后,在目录中生成编译后的公用库:.pyd结尾的文件(作者的是myclass_wrapper.cp39-win_amd64.pyd),接下来就是测试。

6.测试

新建myclass.py

from myclass_wrapper import PyMyClass

obj = PyMyClass(42)
print(obj.get_value())

测试结果:

7.附录

编译后的文件价的构成

如果需要了解各个文件中的语法,请大家自行查询,这里不做赘述。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值