python调用dll实例_Python ctypes cdll.LoadLibrary,实例化一个对象,执行其方法

本文介绍了如何在Python中通过ctypes库调用C语言编写的dll动态链接库。重点强调了argtypes和restype的重要性,以避免因类型不匹配导致的未定义行为,特别是64位系统中的地址截断问题。示例代码展示了创建Detector类并实现过程调用的完整流程,包括对象创建、方法执行和内存管理。
摘要由CSDN通过智能技术生成

始终(正确)为C中定义的函数指定argtypes和restype,否则(C89样式)它们将默认为int(通常为32位),生成!!! 未定义的行为!。在64位,地址(大于2 GiB)将被截断(这正是您正在经历的)。

同一错误的另一个后果:[SO]:不同操作系统上的python ctypes问题(@CristiFati的回答)。

此外,遇到问题时,不要忘记[Python 3.Docs]:ctypes - Python的外部函数库。

下面是您的代码的改编版本。

detector.cpp:

#include

#include

#include

#define C_TAG "From C"

#define PRINT_MSG_2SP(ARG0, ARG1) printf("%s - [%s] (%d) - [%s]: %s: 0x%0p\n", C_TAG, __FILE__, __LINE__, __FUNCTION__, ARG0, ARG1)

using std::endl;

std::ofstream outFile;

class Detector {

public:

Detector();

void process(int *pIn, int *pOut, int n);

private:

int m_var;

};

Detector::Detector()

: m_var(0) {

outFile.open("addr_debug.txt&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值