2009-09-04 3 views
0

J'ai le prototype de fonction ici:Comment faire pour encapsuler cette fonction C, avec plusieurs arguments, avec ctypes?

extern "C" void __stdcall__declspec(dllexport) ReturnPulse(double*,double*,double*,double*,double*); 

Je dois écrire un certain python pour accéder à cette fonction qui est dans une DLL. J'ai chargé la DLL, mais chacun des double * pointe réellement vers un nombre variable de doubles (un tableau), et J'ai du mal à le faire fonctionner correctement.

Merci à tous!

Répondre

1

Pour faire un tableau avec, disons, n double:

arr7 = ctypes.c_double * `n` 
x = arr7() 

et passer x à votre fonction où il veut un double*. Ou si vous avez besoin d'initialiser x que vous le faites:

x = arr7(i*0.1 for i in xrange(7)) 

et similaires. Vous pouvez boucler x, l'indexer, et ainsi de suite.

+0

Génial! Merci! – trayres

+0

De rien; Si cette réponse s'avère être la solution à votre problème, rappelez-vous de l'accepter (utilisez l'icône de coche sous le nombre donnant le nombre de votes pour la réponse), c'est l'étiquette SO fondamentale. –

+0

Ah, merci encore! – trayres

1

Je n'ai pas trop regardé ctypes, mais essayez d'utiliser un tableau numpy du bon type. Si cela ne fonctionne pas automatiquement, ils ont également un attribut ctypes qui devrait contenir un pointeur vers les données.

Questions connexes