python 调用C++ DLL,传递int,char,char*,数组和多维数组
ctypes 数据类型和 C数据类型 对照表
ctypes type | C type | Python type |
---|---|---|
c_bool | _Bool | bool (1) |
c_char | char | 1-character string |
c_wchar | wchar_t | 1-character unicode string |
c_byte | char | int/long |
c_ubyte | unsigned char | int/long |
c_short | short | int/long |
c_ushort | unsigned short | int/long |
c_int | int | int/long |
c_uint | unsigned int | int/long |
c_long | long | int/long |
c_ulong | unsigned long | int/long |
c_longlong | __int64 or long long | int/long |
c_ulonglong | unsigned __int64 or unsigned long long | int/long |
c_float | float | float |
c_double | double | float |
c_longdouble | long double | float |
c_char_p | char * (NUL terminated) | string or None |
c_wchar_p | wchar_t * (NUL terminated) | unicode or None |
c_void_p | void * |
int/long or None
|
//C++文件
#include<iostream> using namespace std; //该文件名称:cpptest.cpp //终端下编译指令: //g++ -o cpptest.so -shared -fPIC cpptest.cpp //-o 指定生成的文件名,-shared 指定微共享库,-fPIC 表明使用地址无关代码 extern "C"{//在extern “C”中的函数才能被外部调用 int test(int int_test,char char_test,char *test_string,int int_arr[4],char char_arr2[2][2]) { cout<<"输出参数中的int型:"; cout<<int_test<<endl;
cout<<"输出参数中的char型:"; cout<<char_test<<endl;
cout << "输出参数中的字char*字符:"; cout<<test_string<<endl; cout << "输出参数中的int数组"; for(int x = 0;x< 4;x++){cout << int_arr[x]<<" ";} cout << endl; cout <<"输出参数中的二维数组:"; for(int x = 0;x<2;x++){ for(int y = 0;y<2;y++){ cout <<char_arr2[x][y] << " "; } } cout << endl; return 0; } }
//py文件
import ctypes mylib = ctypes.cdll.LoadLibrary("cpptest.so") char_p_test = bytes("中国","utf8")#汉字需用采用utf8编码 int_arr4 = ctypes.c_int*4 int_arr = int_arr4() int_arr[0] = 1 int_arr[1] = 3 int_arr[2] = 5 int_arr[3] = 9 char_arr2 = ctypes.c_char*2 char_arr22 = char_arr2*2 char_arr22a = char_arr22() char_arr22a[0][0] = b'a' char_arr22a[0][1]= b'b' char_arr22a[1][0] = b'c' char_arr22a[1][1] = b'd' mylib.test(9999,'a',char_p_test,int_arr,char_arr22a)
参考:python 调用C++,传递int,char,char*,数组和多维数组
结构体传参
https://www.jb51.net/article/52513.htm
『Python CoolBook』使用ctypes访问C代码_下_demo进阶
https://www.programcreek.com/python/example/1243/ctypes.c_char_p