如何将指针传回ctypes?

如何将指针传回ctypes?,第1张

如何将指针传回ctypes?

您走在正确的轨道上。

// TestDLL.cpp#include <string.h> // strcpyextern "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.pyimport ctypeslib = 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 stringprint ctypes.c_char_p(p).value# free the memory through the DLLlib.stringfree(p)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存