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?
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.