gpt4 book ai didi

python - 如何使用 ctypes 将 python 列表传递给 C 函数 (dll)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:51 26 4
gpt4 key购买 nike

背景

我有一些 Python 分析软件,我必须传递一个 4096 字节的列表(看起来像这样 [80, 56, 49, 50, 229, 55, 55, 0, 77, ......]) 到dll,以便dll将其写入设备。

  1. 要写入的字节存储在变量名data中
  2. 必须从 python 调用的 c 函数(在 dll 中)是

    int _DLL_BUILD_ IO_DataWrite(HANDLE hDevice, unsigned char* p_pBuff, unsigned char p_nByteCntInBuff);

  3. 我无权访问dll代码

尝试过的方法

我试图声明一个数据类型

data_tx = (ctypes.c_uint8 * len(data))(*data)

并调用函数

ret = self.sisdll.IO_DataWrite(self.handle, ctypes.byref(data_tx), ctypes.c_uint8(pending_bytes))

问题

似乎没有错误,但它不起作用。 API 调用适用于 C 和 C++。

我这样做对吗?谁能帮我指出错误?

最佳答案

您尝试实现的目标可以这样完成。

接口(interface)头,比如functions.h

#include <stdint.h>
#include "functions_export.h" // Defining FUNCTIONS_API
FUNCTIONS_API int GetSomeData(uint32_t output[32]);

C源码,函数.c

#include "functions.h"
int GetSomeData(uint32_t output[32]) {
output[0] = 37;
}

在 python 中,你只需编写

import ctypes
hDLL = ctypes.cdll.LoadLibrary("functions.dll")
output = (ctypes.c_uint32 * 32)()
hDLL.GetSomeData(ctypes.byref(output))
print(output[0])

您应该会在屏幕上看到数字 37。

关于python - 如何使用 ctypes 将 python 列表传递给 C 函数 (dll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com