|
本帖最后由 layty 于 2017-11-9 12:24 编辑
环境:x86,win7 python3.6
模块:ctypes
问题:
有这么一个dll的函数Error_Read (MError , Meter_No ,Dev_Port)
参数MError 是一个数组缓冲,返回函数的处理结果
c里面直接定义个全局数组,然后传递该数组地址即可。
我在python中是这么调用的
p =create_string_buffer(50)
dll.Error_Read(p,1,1)
报错:
OSError: exception: access violation writing 0x00000000
如果我初始化
p =create_string_buffer(b'01'*50)
报错:
OSError: exception: access violation writing 0x01010101
现象:
传递参数的时候python是将p的值作为参数直接传递进去了,我现在不知道如何取地址值
- p =create_string_buffer(50)
- p
- <ctypes.c_char_Array_50 object at 0x02E8D3A0>
- p.value
- b''
复制代码- p =create_string_buffer(b'01'*50)
- p
- <ctypes.c_char_Array_101 object at 0x02E8D3F0>
- p.value
- b'0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101'
复制代码
测试代码- #环境导入
- import ctypes
- dll = ctypes.windll.LoadLibrary( 'hscom.dll' )
- from ctypes import *
复制代码
|
|