【发布时间】:2011-08-23 12:56:18
【问题描述】:
我在 Visual Studio 中编写了以下代码来创建扩展 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 导入windll
libA = windll.LoadLibrary("c:\ctypestest\test.dll")
A 类: def 初始化(自我): self.obj = libA.A_new()
def __enter__(self):
return self
def __exit__(self):
libA.A_destruct(self.obj)
def some_func(self):
libA.A_someFunc(self.obj)
在 python 2.7.1 命令提示符下,我执行以下操作 -
import wrapper as w ----> 工作正常
a = w.A() ----> works fine
a.some_func() ----> Error
libA.A_someFunc(self.obj)
ValueError: 过程可能调用了太多参数。(超过 4 个字节)
请帮忙。
提前致谢,
【问题讨论】:
-
你忘记了
extern "C"ctypes 使用的所有函数。恕我直言,删除__del__方法内的 c++ 对象。