У меня есть небольшой фрагмент кода Python, который вызывает C ++ DLL. Функция DLL принимает указатель на таблицу из 6 значений типа double (для вывода) и таблицу строк для ввода.
myDll.get_results.argtypes = [ ctypes.POINTER(ctypes.c_double * 6), ctypes.POINTER(ctypes.c_char*100) ]
results = (ctypes.c_double * 6)()
myDLL.get_results(ctypes.byref(results), input_string)
Затем я распечатываю результаты:
for r in results:
print r
И это прекрасно работает большую часть времени. Время от времени, однако, я получаю следующую ошибку, которая происходит при печати значений. Это происходит случайным образом, то есть это может произойти после печати первого или последнего значения.
0.0
0.1
Traceback (most recent call last):
File "d:\Documents\test.py", line 109, in <module> execute()
File "d:\Documents\test.py", line 45, in execute
print(f)IOError: [Errno 0] Error
PS D:\Documents>
Это также (кажется) никогда не произойдет, если я установлю точку останова перед печатью. Я пытался перевести 1 секунду в спящий режим перед печатью, но это не помогло, но ошибка все равно возникает.
На стороне C ++ моя функция выглядит так:
RESULT_API void get_results(double res[6], char c[][100]) {
for (int i = 0; i < 6; i++)
res[i] = (double)i*0.1;
}
Спасибо!
Я, кажется, неправильно диагностировал проблему. Проблема с IO в VSCode, а не с моим кодом:
https://github.com/Microsoft/vscode/issues/36630
Это известная проблема, которая может возникнуть при любой последовательной печати на консоли. Не имеет никакого отношения к DLL!
Исправление уже в пути.
Других решений пока нет …