2017-01-06 3 views
1

J'ai une fonction C dans une DLL qui ressemble à ceci. Lorsque l'appel aboutit, quelque chose est sauvegardé dans tous les paramètres OUT. Utilisation de cythypes python (sous Windows) Je souhaite doubler la référence du pointeur de réponse ** et voir quelle est sa valeur.Pointeur de référence double Python Ctypes

Merci dans Adv.

Répondre

2

Je n'ai pas vos Format et Bool types, donc avec quelques substitutions, voici un code de DLL exemple:

#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; 
} 

Cela permet de récupérer les données de sortie. Il suffit de créer quelques instances des types ctypes corrects et de les transmettre par référence:

>>> 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)