直接上代码:
struct struct_str_arr
{
char* str_ptr[1000];
};
struct_str_arr str_arr;
struct_str_arr* str_arr_ptr = (struct_str_arr*)malloc(sizeof(str_arr));
DLLEXPORT struct_str_arr* __stdcall test_str_arr(char *str_ptr[])
{
str_arr_ptr->str_ptr[0] = str_ptr[0];
str_arr_ptr->str_ptr[1] = str_ptr[1];
str_arr_ptr->str_ptr[2] = str_ptr[2];
return str_arr_ptr;
}
# 传递字符串数组
# 对应c++ test_str_arr
import ctypes
path = r'E:\01_Lab\VisualStudioLab\cpp_dll\cpp_dll\Debug\cpp_dll.dll'
dll = ctypes.WinDLL(path)
# 传递的数据
char_p_arr = ctypes.c_char_p * 100;
arr = char_p_arr(b'google',b'baidu',b'qq')
# 返回的数据
class StructPointer(ctypes.Structure):
_fields_ = [("str_ptr", ctypes.c_char_p * 1000)]
dll.test_str_arr.restype = ctypes.POINTER(StructPointer)
ret_ptr = dll.test_str_arr(ctypes.pointer(arr)) #传递数组指针
ret_ptr.contents.str_ptr[2].decode()