如何在ctypes中传回指针?
发布时间:2020-12-14 04:11:35 所属栏目:Windows 来源:网络整理
导读:对ctypes不太了解,最近刚开始使用它. 我在C-like dll中有一个简单的函数,它返回一个指向动态生成的字符串的指针. 它工作正常,但是,因为我手动为字符串分配内存,我应该在使用后释放它. 我有这样的事情: extern "C" char* DLL_EXPORT func(const char* str1,c
对ctypes不太了解,最近刚开始使用它.
我在C-like dll中有一个简单的函数,它返回一个指向动态生成的字符串的指针. 我有这样的事情: extern "C" char* DLL_EXPORT func(const char* str1,const char* str2) { return getSomeString(str1,str2); } // Goal is to call this function correctly from Python. extern "C" void DLL_EXPORT freeMem(void *mem) { if(mem!=NULL) delete mem; } 但我不知道,我如何将收到的指针传回Python中删除?
你走在正确的轨道上.
// TestDLL.cpp #include <string.h> // strcpy extern "C" __declspec(dllexport) char* stringdup(const char* str) { char* p = new char[strlen(str)+1]; strcpy(p,str); return p; } // if you have no good reason to use void*,use the type // you've allocated. while it usually works for built-in // types,it wouldn't work for classes (it wouldn't call // the destructor) extern "C" __declspec(dllexport) void stringfree(char* ptr) { // you don't need to check for 0 before you delete it,// but if you allocate with new[],free with delete[] ! delete [] ptr; } 在python中: # Test.py import ctypes lib = ctypes.cdll.TestDLL # this creates a c-style char pointer,initialized with a string whose # memory is managed by PYTHON! do not attempt to free it through the DLL! cstr = ctypes.c_char_p("hello ctypes") # call the dll function that returns a char pointer # whose memory is managed by the DLL. p = lib.stringdup(cstr) # p is just an integer containing the memory address of the # char array. therefore,this just prints the address: print p # this prints the actual string print ctypes.c_char_p(p).value # free the memory through the DLL lib.stringfree(p) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – 如何使用PowerShell在x天以上的日志文件上启用N
- windows – 如何使用PowerShell远程重命名域中的计算机?
- windows – 如何创建hotfolder解决方案
- .net – Windows Mobile 6.5上的Windows Phone 7应用程序
- windows – 如何获取窗口原始大小和位置(wsNormal vs wsMax
- vbscript – 如何使用Windows脚本以安全模式重新启动计算机
- 我应该完全淘汰我们的Windows域名吗?
- 是否有理由不在Windows中使用休眠模式?
- setlocale卡在Windows上
- .net – Windows窗体数据绑定DisplayMember自定义类的子属性
推荐文章
站长推荐
- windows – 在本地设置SVN?
- windows安装memcached提示failed to install ser
- windows-vista – 为什么要使用64位操作系统?
- 如何在WDS部署的专门化传递期间运行PowerShell脚
- 工作流基础 – Windows工作流服务 – 它们是什么
- 不允许使用Windows cmd脚本变量值中的括号?
- 在.net中设置Windows服务描述的最佳方式是什么?
- Windows 7和c:在Raspberry Pi上使用的交叉编译应
- 在我的.NET Windows窗体上从Chrome实现拖放
- .net – Windows窗体数据绑定DisplayMember自定义
热点阅读