如何使用ctypes将参数传递给dll函数?

时间:2019-09-05 10:26:52

标签: python-3.x dll ctypes

我正在尝试使用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 缓冲区

任何帮助将不胜感激。

0 个答案:

没有答案