c语言编写动态星空_Python C/C++ 使用ctypes编写拓展

4f996473d8fcd6300322d5bb318ea77f.png

ctypes 是一个Python 标准库中的一个库.为了实现调用 DLL,或者共享库等C数据类型而设计.它可以把这些C库包装后在纯Python环境下调用.本教程是在MAC下进行的.

C++代码

#include 
#ifdef __cplusplus 
    #define XETR extern "C"
#else
    #define XETR
#endif   

#ifdef _WIN32
    #define LIB XETR __declspec(dllexport)
#else
    #define LIB XETR
#endif

LIB  void CtypesDemo(const wchar_t *str,int x,int y){
    printf("Cpp %ls %d\n",str,x+y);
}        

因为系统不同,调用方式不同
_WIN32:表示win32和win64
__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用。
extern "C" 的作用是让 C++ 编译器将 extern "C" 声明的代码当作 C 语言代码处理,可以避免 C++ 因符号修饰导致代码不能和C语言库中的符号进行链接的问题。

将C++文件编译成so文件

g++ -fPIC -shared -o ctypes ctypes.cpp

windows用户可以使用Visual studio 2015编译生成dll文件。
在mac和linux没有dll文件,一般都是so文件。

Python代码调用

from  ctypes import *
lib=CDLL("ctypes")
lib.CtypesDemo("公众号:Python学习开发",4,5)

总结

关于ctype是的基本用法大概就这么多,实际上在编写Python拓展库的时,如果要最终生成Python模块并导入使用,就要遵循Python API进行编写,所有的函数定义都是遵循一定的规则,关注这部分内容,目前也已经写完,正在修改中,后续将会在公众号:夜幕首发,后续转发到本公众号,敬请关注!

推荐阅读

Python 爬虫面试题 170 道:2019 版

Python反编译之字节码

深度好文,从底层理解 Python 的执行

深入理解TCP 服务器与客户端

添加微信[gopython3].回复:回复Go或者Python加对应技术群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值