Python 调用 C 语言的简单流程(二)

本文揭示了在Python调用C语言编译的DLL时,由于C++的名称修饰导致的AttributeError问题。通过加入`extern "C"`声明或者使用Python的getattr函数和dll对象的顺序特性,可以解决函数名找不到的问题。文中提供了具体实例和相关参考资料。
摘要由CSDN通过智能技术生成
Python 调用 C 语言的简单流程(一)中,介绍了非常简单的建立DLL项目和用Python调用dll文件的流程,现在把这个技术应用到实践的时候,可能会碰到这样的问题:“AttributeError: function '****' not found”这是为什么呢?
现在假设在一个文件中有这样两个函数:
// Header
extern "C"
{ // Name in DLL will be "MyAdd" - but you won't be able to find parameters etc...
__declspec(dllexport) int MyAdd(int a, int b); 
} 

// Name will be with lot of prefixes but some other info is provided - IMHO better approach
__declspec(dllexport) int MyAdd2(int a, int b);


//.cpp Code
__declspec(dllexport) int MyAdd(int a, int b)
{ return a+b;
}
__declspec(dllexport) int MyAdd2(int a, int b)
{ return a+b;
} 

你感觉两个相同的函数,就差了一个extern"C"声明,这会有区别吗,这会导致你的Python调用dll的程序出错吗?答案就是:这正是导致AttributerError的元凶!

举个例子:

在C++的文件中函数生成的dll文件对应的导出名字是这个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值