相关疑难解决方法(0)

通过ctypes为返回到python的对象释放内存

我正在使用ctypes将MyDll中的c函数扩展为python.

from ctypes import cdll
libX = cdll.LoadLibrary("d:\\MyTestProject\\debug\\MyDll.dll")
Run Code Online (Sandbox Code Playgroud)

进一步在.py文件中我有一个类,其方法通过ctypes调用MyDll中的函数.

Class MyTestClass:
       def __init__(self,id):
           libA.MyTestClassInDLL_new.restype = ctypes.c_void_p
           self.obj = libA.MyTestClassInDLL_new(id)
Run Code Online (Sandbox Code Playgroud)

相应的c函数MyTestClassInDLL_new已在MyDll中定义为 -

extern "C" __declspec(dllexport) void * MyTestClassInDLL_new(char* id) 
{ 
     pTestObject = new CMyTestClassInDLL(CString(id)); 
     return (void *)pTestObject;    
}
Run Code Online (Sandbox Code Playgroud)

注意我使用new来在我的vc ++ dll中实例化该对象并返回指向它的指针.我在.py文件中将此函数的restype设置为ctypes.c_void_p.

我执行的脚本包含以下内容 -

testob = MyTestClass("5")
Run Code Online (Sandbox Code Playgroud)

这很好用.我在这里获得的testob进一步用于调用其内部从MyDll调用c函数的方法.

但是,该对象是使用MyDll中的new创建的,并通过MyTestClassInDLL_new()函数返回.这个物体是如何被摧毁的?在某个地方我需要使用delete pTestObject,以便调用它的析构函数来执行清理并释放内存.

python ctypes

5
推荐指数
1
解决办法
1852
查看次数

Python ctypes整数指针

如何使用python ctypes实现此功能

extern  int __stdcall GetRate(HANDLE hDev, int* pData)
Run Code Online (Sandbox Code Playgroud)

如何设置数据类型,以便我可以打印pData值

python ctypes

5
推荐指数
1
解决办法
8582
查看次数

标签 统计

ctypes ×2

python ×2