Ruft die Speicheradresse ab, auf die ein Ctypes-Zeiger zeigt

8

Kurzfassung: Wie kann ich die Adresse erhalten, auf die ein Ctypes-Zeiger zeigt?

Lange Version: Ich habe eine Python-Funktion als Callback mit einer C-Bibliothek registriert. Die C-Bibliothek erwartet die Funktionssignatur von void (*p_func)(char stat, char * buf, short buf_len) , so dass ich eine entsprechende Python-Funktion registriere. Wenn ich in die Python-Funktion komme, möchte ich die Speicheradresse wissen, auf die buf zeigt. Wie kann ich das tun?

    
Iain Rist 13.03.2012, 15:26
quelle

1 Antwort

9

Ich habe das selbst behoben, indem ich die Dokumentation gelesen habe.

Ich wollte den Speicherort eines Speicherblocks wissen, der von einer Bibliothek zugewiesen wurde. Ich hatte den Ctypes-Zeiger, der auf diesen Block zeigte. Um die Speicheradresse des Blocks zu erhalten, habe ich ctypes.addressof(p_block.contents) verwendet.

Die Verwirrung entstand um mein Verständnis von p_block.contents != p_block.contents , aber dann erkannte ich, dass alle p_block.contents -Objekte den gleichen zugrunde liegenden Puffer haben. Die Adresse des zugrunde liegenden Puffers wird mit ctypes.addressof erhalten.

    
Iain Rist 20.03.2012, 09:52
quelle

Tags und Links