我正在尝试使用Python将参数传递给dll函数,但我有第一个dll函数正在工作,但没有第二个需要额外参数的函数。 如何使用ctypes将这些参数正确传递给dll函数?
dll函数
uint32_t connectToCyclone(char *nameIpOrPortIdentifier) ;
bool startDynamicDataProgram(uint32_t cycloneHandle, uint32_t targetAddress,
uint16_t dataLength, char *buffer);
Python
lib = cdll.LoadLibrary(program)
cyc_name = 'CYC_JF'.encode('utf-8')
target_address = b'0x08007000'
size = b'4'
string_buffers = create_string_buffer(4)
results = addressof(string_buffers)
lib.connectToCyclone(cyc_name) # working correctly
lib.dynamicReadBytes(cyc_name, target_address, size, results) # not working correctly
# previously had the below, then changed it to the above to add in b'' parameter.
# lib.dynamicReadBytes(cyc_name, 0x08007000, 4, results)
print(f'results: {results}')
print(f'string_buffers_address: {string_buffers}')
print(f'string_buffers: {binascii.hexlify(string_buffers).upper()}')
输出:
results: 47016696
string_buffers_address: <ctypes.c_char_Array_4 object at 0x02CD6AD0>
string_buffers: b'00000000'
以前,我只是传递 cyc_name ='CYC_JF ',但意识到我需要对其进行编码 'CYC_JF'.encode('utf-8 ') ,以正确传递它。因此connectToCyclone dll函数可以正常工作。
现在,我有其他参数要传递给“ target_address”和“ size”的 startDynamicDataProgram() ,但我不确定我是否正确传递了这些参数?
如果正确传递了它们,那么我的问题就出在下一个问题上,我是否正确设置了 * char 缓冲区 。
任何帮助将不胜感激。