Python ctypes Notlarım – 8

Merhaba arkadaşlar, artık python ctypes notlarım serisine bu yazımla birlikte elveda diyoruz. Bir kaç ayrıntı dışında hemen hemen python ctypes‘ın her davranışını elimden geldiği kadar Türkçe’ye uygun bir şekilde aktarmaya çalıştım.

Son yazımda; Tamamlanmamış türler, ctypes.util fonksiyonlarını, ctypes.PYFUNCTYPE, ctypes.WINFUNCTYPE

Incomplete Types

Tamamlanmamış türleri, python ctypes da structure, union ve dizilerin (array) elemanlarına uygulanabilir. Insan adından bir struct ifademiz olduğunu varsayarak, C’de Insan struct’ı içerisinde tekrar Insan struct’ını veri tipi olarak tanımlayabiliyoruz. Python ctypes’da bildiğimiz üzere _field_ değişkenine aktarıyorduk. Böyle bir durum var struct sınıfı oluşturulup pass geçildikten sonra tanımlayı sınıf dışında tekrar yapılması gerekilmektedir. Örnek;

C

Python

Kullanım

Fatih Mert Fatih Mert Fatih

ctypes.util

ctypes.util.find_library

String parametre alır. İşletim sistemi üzerinde yüklü olan kütüphaneleri arar ve bulduğu kütüphanenin yolunu (pathname) döndürür.

Windows için find_library geçerli olsa da. Windows ortamında msvcrt kütüphanesini bulmak için, yine aynı şekilde (tabi parametresiz) ctypes.util.find_msvcrt() fonksiyonunu kullanabilirsiniz.

ctypes.type.in_dll()

Bazı paylaşılan kütüphaneler fonksiyonlarını/değişkenlerini dışarı aktarmıyor olabiliyorlar. Bu gibi durumlarda fonksiyona in_dll() fonksiyonu ile ulaşabiliyoruz. in_dll() fonksiyonu ctypes türlerinin fonksiyonudur. Örnek;

C

Derleme

Python

Çıktı

PYFUNCTYPE

Kullanılan parametreleri CFUNCTYPE‘dan bağımsız olmak üzere Python’un kullandığı fonksiyonları döndüren fonksiyon çağırma fonksiyonudur. Yalnız PYFUNCTYPE çalıştırıldığı sırada GIL de devreye girmeye başlayacaktır. Örnek kullanım;

WINFUNCTYPE

CFUNCTYPE, PYFUNCTYPE ile ortak kullanıma sahip olmasının dışında Windows için geçerli bir fonksiyondur. stdcall üzerinde çağırma işlemleri gerçekleştirilir. Windows CE sürümü için CFUNCTYPE fonksiyonunu kullanmanız gerekmektedir.

Python ctypes notlarım – 1 ‘de yani ilk başladığımda MessageBox örneği yapmıştık.  O örneğe birde WINFUNCTYPE ile bakalım. Hemen eklemem gerekiyor, ctypes içerisinde ctypes.wintypes adında bir windows değişkenlerinin türlerini içeren dosya var. Bu türlere örnek (HWND, LPCSTR, LPCSTR)

C

Python

python ctypes winfunctype messageboxa
python ctypes winfunctype messageboxa

Python ctypes Notlarım serisi bu yazıyla birlikte artık sona ermiştir. Eksiklerimi, eklenmesi gerekenler kısacası her türlü durumlarınız bana iletmeniz yeterli olacaktır.

Saygılarımla..

Leave a Reply

Your email address will not be published. Required fields are marked *