Я работаю над проектом с использованием DataAcq SDK Datatranlation.
Я пытаюсь получить доступ к буферу и установить его значения.
пример того, как это используется в C:
/* allocate the output buffer, sets handler for buffer */
CHECKERROR (olDmCallocBuffer(0,0,(ULNG) size,2,&hbuf));
/* Get pointer to buffer */
CHECKERROR (olDmGetBufferPtr(board.hbuf,(LPVOID*)&lpbuf));
/* fill the output buffer*/
lpbuf[i] = (UINT) some value
/* Put the buffer to the DAC */
CHECKERROR (olDaPutBuffer(board.hdass, hbuf));
Я пытаюсь сделать то же самое в Python, используя ctypes:
_buffer = ctypes.c_void_p()
# Create buffer:
check_error(memlib.olDmCallocBuffer(ctypes.c_uint(0x0000),
ctypes.c_uint(0x0000),
ctypes.c_uint(2),
ctypes.c_uint(4),
ctypes.byref(_buffer)))
# Get pointer to buffer:
buf_ptr = ctypes.c_void_p()
check_error(memlib.olDmGetBufferPtr(_buffer, ctypes.byref(buf_ptr)))
Но как я могу получить доступ и установить элементы, как в примере на C выше?
Я могу сделать ссылку в Python, которую я могу изменить, но как разобрать это обратно в функцию olDaPutBuffer?
Edit:
Решено с помощью memmove
из ctypes
:
_buffer = ctypes.c_void_p()
# Create buffer:
check_error(memlib.olDmCallocBuffer(ctypes.c_uint(0x0000),
ctypes.c_uint(0x0000),
ctypes.c_uint(2),
ctypes.c_uint(4),
ctypes.byref(_buffer)))
# Get pointer to buffer:
buf_ptr = ctypes.c_void_p()
check_error(memlib.olDmGetBufferPtr(_buffer, ctypes.byref(buf_ptr)))
c_type_buf = ctypes.c_buffer(some values)
ctypes.memmove(buf_ptr, ctypes.byref(c_type_buf), len(c_type_buf))