Я разработал DLL на C ++, и мне нужно использовать все функции с Python.Поскольку я новичок в Python (3.x), у меня есть проблема, чтобы обернуть определенную функцию.
Здесь функция C в моей DLL.Эта функция возвращает адрес таблицы строк, которая содержит название устройств и количество устройств.
char dev[10][16];
void listDevices(char **devices, short *number)
{
short n;
// Process which recover devices string and number, here 2 devices
...
n=2;
sprintf(dev[0],"%s","device0");
sprintf(dev[1],"%s","device1");
// Return the result
for(int i=0;i<n;i++) devices[i]=dev[i];
*number=n;
}
Вот небольшая программа на C (которая работает) для использования этой функции:
char *devicesList[10];
int n=0;
listDevices(devicesList, &n);
for (int i = 0; i < n; i++)
printf(" -%u: %s\n", i, devicesList[i]);
Результат: - 0: device0 - 1: device1
Теперь я попытался сделать то же самое в Python, но у меня есть «запись о нарушении доступа» из компилятора.Вот моя маленькая программа на Python:
myDll= dllOpen(Dll)
listDev = myDll.listDevices
listDev.argtypes = [POINTER(c_char_p), POINTER(c_short)]
devicesList = POINTER(c_char_p)()
n = c_short()
listDev(devicesList,byref(nDev))
for i in range(n):
print (devicesList[i])
Я думаю, что я не использую правильное объявление таблицы указателей на строку.Я не знаю, как правильно это объявить, поэтому если у вас есть решение, я буду очень признателен.
Спасибо за помощь