Python 通过ctypes在扩展dll中使用类时需要帮助

Python 通过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-&

我在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->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()