您走在正确的轨道上。
// 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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)