Pertanyaan Dapatkah saya menggunakan ctypes untuk memanggil kembali fungsi C dari python yang tertanam di C?


Saya memiliki program C dengan kode python tertanam. Saya telah menyusun python 2.7.2 dari source dan menghubungkan program saya dengan libpython2.7.a.

Sekarang dalam kode python saya, saya ingin memanggil kembali fungsi dari pustaka C lain yang tertaut ke dalam program C saya. Saya dapat menulis ekstensi python (lihat Memperluas Python Embedded dalam dokumen ini). Namun, ctypes akan membuat ini jauh lebih mudah dan akan memungkinkan saya untuk menggunakan beberapa kode yang ada unchaged.

ctypes diarahkan untuk memuat pustaka bersama dan saya ingin tahu apakah ada cara untuk 'mengarahkan' kembali ke kode program statis saya.

Saya tidak dapat mengkompilasi kode yang relevan ke dalam pustaka bersama karena target saya adalah iOS dan AFAIK shared libraries dilarang oleh Apple.


4
2018-06-13 13:21


asal


Jawaban:


Dari kode Python, Anda dapat membuat pembungkus ctypes untuk fungsi statis seperti ini:

restype = ctypes.c_int
argtypes = [ctypes.c_int, ctypes.c_double]        # or whatever
functype = ctypes.CFUNCTYPE(restype, *argtypes)
wrapper = functype(address_of_static_function_as_an_int)

Anda tentu saja dapat memanggil kode ini (atau serupa) dari kode C Anda.


2
2018-06-13 13:33



Buatlah nilai ctype (mis. ctypes.c_void_p) mengenkapsulasi pointer fungsi Anda dan mengirimkannya ke kode Python Anda.


0
2018-06-13 13:40