Python 通过ctypes在扩展dll中使用类时需要帮助
我在VisualStudio中编写了以下代码来创建扩展dllPython 通过ctypes在扩展dll中使用类时需要帮助,python,ctypes,Python,Ctypes,我在VisualStudio中编写了以下代码来创建扩展dll class A { public: void someFunc() { } }; extern "C" __declspec(dllexport) A* A_new() { return new A(); } extern "C" __declspec(dllexport) void A_someFunc(A* obj) { obj-&
class A
{
public:
void someFunc()
{
}
};
extern "C" __declspec(dllexport) A* A_new()
{
return new A();
}
extern "C" __declspec(dllexport) void A_someFunc(A* obj)
{
obj->someFunc();
}
extern "C" __declspec(dllexport) void A_destruct(A* obj)
{
delete obj;
}
我想使用ctypes在python中使用类A。我已经在wrapper.py中编写了以下代码--
从ctypes导入Windell
libA=windell.LoadLibrary(“c:\ctypestest\test.dll”)
A类:
def初始化(自身):
self.obj=libA.A_new()
在Python2.7.1命令提示符下,我执行以下操作-
将包装器导入为w-->工作正常
a = w.A() ----> works fine
a.some_func() ----> Error
libA.A_someFunc(self.obj)
ValueError:调用过程的参数可能太多。(超出4字节)
请帮忙
提前感谢,它应该与python中的任何对象创建相同:
some_var = A()
导出使用的是
cdecl
调用约定,而不是stdcall
,因此需要使用CDLL
而不是windl
test.cpp:
#包括
#包括
使用名称空间std;
甲级{
字符串名;
公众:
A(常量字符串和名称){
此->名称=名称;
你不能忘记extern“C”吗/> > cType使用的所有函数.imHO删除C++代码中的C++对象.y.DELXAR<方法。实现<代码> IyAsIsLux和类A{public:void someFunc(){};//extern“C”//告诉编译器在下一个作用域中使用C链接。//{extern“C”uu declspec(dllexport)A*A_new(){return new A();}extern“C”u declspec(dllexport)void A_someFunc(void*obj)//obj->someFunc()}extern“C”\uu declspec(dllexport)void A_destruct(A*obj){delete obj;}感谢所有帮助过我的人。我意识到我没有把代码的正确副本放进去。我请求你重新阅读代码,如果可能的话请提供帮助。
some_var = A()