2017-01-06 12 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の場合)を使用すると、**応答ポインタを二重参照解除し、その値が何であるかを確認したいと思います。

ありがとうございました。

答えて

2

いくつかの置換を有する、ここではいくつかのサンプルDLLコードがありますので、私は、あなたのFormatBool種類を持っていない:

#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) 
関連する問題