Python Ctypes Double De-reference Pointer

时间:2017-01-06 16:57:28

标签: python ctypes

我在DLL中有一个C函数,看起来像这样。

/home/(user name)/Android/Sdk

当通话成功时,会将某些内容保存到所有OUT参数中。

使用python ctypes(在Windows上)我想双重取消引用**回复指针,看看那里有什么值。

感谢Adv。

1 个答案:

答案 0 :(得分:3)

我没有FormatBool类型,所以在某些替换中,这里有一些示例DLL代码:

#include <stddef.h>
__declspec(dllexport) void ProcessAndsend(char *out,        // IN
                                          char const *reqp,   // IN
                                          size_t reqLen,      // IN
                                          int *Status,       // OUT
                                          char const **reply, // OUT
                                          size_t *resLen)     // OUT
{
    *Status = 1;
    *reply = "test";
    *resLen = 5;
}

这将检索输出数据。只需创建一些正确的ctypes类型的实例,并通过引用传递它们:

>>> from ctypes import *
>>> dll = CDLL('your.dll')
>>> f = dll.ProcessAndsend
>>> f.argtypes = c_char_p,c_char_p,c_size_t,POINTER(c_int),POINTER(c_char_p),POINTER(c_size_t)
>>> f.restype = None
>>> status = c_int()
>>> reply = c_char_p()
>>> size = c_size_t()
>>> f('abc','def',3,byref(status),byref(reply),byref(size))
>>> status
c_long(1)
>>> reply
c_char_p('test')
>>> size
c_ulong(5L)
相关问题