#include <stdio.h> __declspec( dllexport ) int func_test(unsigned short anInputSignal1[], int nLen1, unsigned short anInputSignal2[], int nLen2, unsigned short *pnOutput, int *pLen); int func_test(unsigned short anInputSignal1[], int nLen1, unsigned short anInputSignal2[], int nLen2, unsigned short *pnOutput, int *pLen) { int i = 0; for (i = 0; i < nLen1; i++) { printf("%d, ", anInputSignal1[i]); } printf("\n"); for (i = 0; i < nLen2; i++) { printf("%d, ", anInputSignal2[i]); } printf("\n"); for (i = 0; i < *pLen; i++) pnOutput[i] = i; *pLen = 1; return 0; }编译成为 dll,放到python工程文件夹下,test.py内容如下:
import ctypes import array inputSignal1 = array.array('H') inputSignal1.fromlist(range(1, 10)) inputSignal2 = array.array('H') inputSignal2.fromlist(range(11, 20)) cInputArrayType = (ctypes.c_ushort * len(inputSignal1)) cInputSignal1 = cInputArrayType(*inputSignal1) cInputSignal2 = cInputArrayType(*inputSignal2) cOutputArray = (ctypes.c_ushort * 10)() cOutLen = ctypes.c_int(10) mydll = ctypes.CDLL('ctypes.test.dll') mydll.func_test(cInputSignal1, ctypes.c_int(len(inputSignal1)), cInputSignal2, ctypes.c_int(len(inputSignal2)), cOutputArray, ctypes.byref(cOutLen)) print cOutLen.value for data in cOutputArray: print data
输出如下:
1, 2, 3, 4, 5, 6, 7, 8, 9,
11, 12, 13, 14, 15, 16, 17, 18, 19,
1
0
1
2
3
4
5
6
7
8
9
剩下的数据类型可以参考文档,写的挺好的,就是初始化部分开始让我有些纠结,呵呵。