将指针从 python var 传递到 c lib

passing pointer from python var to c lib

我有一个固定的 C 库作为 DLL 文件。 DLL 文件有一些安全功能,这就是为什么我不能查看库。我只知道函数名和需要的数据类型

我需要在 Python 中为函数提供指向我的 var 的指针,即内存中的地址。我尝试使用 ctypes,但它不起作用。用于加载库。我使用 ctypes。

这是我需要启动的包含所有必需变量的函数。

function  (
 const unsigned char* input_array,
 unsigned int multiply_by,
 unsigned char* output_array
);  

所以我在 Python 中初始化我的变量,如下所示:

input_array = "100"
multiply_by = 5
output_array = "000"

之后我加载我的库并启动该功能。

lib = CDLL('func_lib.dll')
lib.function( hex(id(input_array)),
                 multiply_by,
                 hex(id(output_array))
             )

函数不会改变变量 output_array,这是它的目标。我可以看到调用了该函数,因为没有调用错误。我处理指针错误吗?

编辑:我将函数简化为 3 个变量,更多变量也一样。我也认为 input_array 是问题所在。被调用的函数给我一个反馈代码,上面写着 input_array 是错误的。我不知道如何将指针地址发送给函数。

参数 bigarray 在函数签名中声明 const unsigned char *。如果这是正确的,那么 bigarray 变量改变的可能性很小。

编辑 总结评论,这是一个有希望的工作示例,给出了原始函数签名。

    # Load the lib
    lib = CDLL('func_lib.dll')

    # Defines signature, based on C one
    lib.function.argtypes = [ c_char_p, c_uint, c_char_p ]

    # Call parameters
    data_in = b'Sample input'
    data_out = create_string_buffer(16)

    # Call
    lib.function(data_in, 16, data_out)

这里有一个猜测,我假设第二个参数是缓冲区大小,因此在示例调用中我给出了与 create_string_buffer.
相同的值 这里需要调用 create_string_buffer,它是您函数的输出。请注意,这里存在明显的缓冲区溢出风险。