【发布时间】:2011-11-15 22:45:40
【问题描述】:
我正在使用 ctypes 将 MyDll 中的 c 函数扩展到 python。
from ctypes import cdll
libX = cdll.LoadLibrary("d:\\MyTestProject\\debug\\MyDll.dll")
在 .py 文件中,我有一个类,其方法通过 ctypes 调用 MyDll 中的函数。
Class MyTestClass:
def __init__(self,id):
libA.MyTestClassInDLL_new.restype = ctypes.c_void_p
self.obj = libA.MyTestClassInDLL_new(id)
对应的c函数MyTestClassInDLL_new已经在MyDll中定义为-
extern "C" __declspec(dllexport) void * MyTestClassInDLL_new(char* id)
{
pTestObject = new CMyTestClassInDLL(CString(id));
return (void *)pTestObject;
}
注意我正在使用 new 在我的 vc++ dll 中实例化这个对象并返回指向它的指针。我已经在.py文件中设置了这个函数的restype为ctypes.c_void_p。
我执行的脚本包含以下内容 -
testob = MyTestClass("5")
这很好用。我在这里获得的 testob 用于进一步调用它的方法,这些方法在内部调用来自 MyDll 的 c 函数。
但是,该对象是在 MyDll 中使用 new 创建的,并通过 MyTestClassInDLL_new() 函数返回。这个对象如何被销毁?在某处我需要使用 delete pTestObject 以便调用它的析构函数来进行清理并释放内存。
【问题讨论】: