【问题标题】:Ctypes LPSTR function argumentCtypes LPSTR 函数参数
【发布时间】:2021-05-03 15:19:32
【问题描述】:

你好,我有这样的功能

GetAllActivMessagestring(LPSTR pszStrMessages)

它在参数pszStrMessages 中返回活动警报的字符串。 字符串被组织在一个由 50 个字符组成的 25 个字符串的数组中(49+nullterminator)

如何定义变量pszStrMessages 并将其传递给带有ctypes 的函数,然后读取返回值?

感谢和问候

【问题讨论】:

  • LPSTR 不是数组。字符串只是 49char49char... 重复 25 次,所以你需要一个 1250 字符的缓冲区吗?最好至少以示例为例,准确地展示您将如何从 C 调用此 API。

标签: ctypes


【解决方案1】:

我尝试如下:

fun_one = ctypes.WinDLL('C:\Kvara\Exe\ErrorHand.dll')
text = ctypes.create_string_buffer(1250)
alarm_number = fun_one.EH_GetAllActiveMessagesStrings(text)
if alarm_number>0:
print('Active Messages :', alarm_number)
print('Message Sting :', text.value)

alarm_number 返回 2 但是 text.value 只返回第一条消息

任何建议

【讨论】:

    【解决方案2】:

    已解决,我使用 text.raw 而不是 text.value,然后将行拆分为 b'\xoo' 并从结果列表中获取值 问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多