2017-01-06 91 views
1

我有一個DLL它看起來像這樣一個C函數。的Python ctypes的雙解引用指針

ProcessAndsend(Format *out,  // IN 
      char const *reqp, // IN 
      size_t reqLen,  // IN 
      Bool *Status,  // OUT 
      char const **reply, // OUT 
      size_t *resLen)  // OUT 

當呼叫成功的東西得到保存所有OUT參數。

使用Python ctypes的(在Windows上)我要仔細去參考**回覆指針,看看有什麼價值存在。

Thanks in Adv。

回答

2

我沒有你的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)