Python ctypes Notlarım – 5

İyi bayramlar arkadaşlar. Bayram nedeniyle yazılarıma düzenli bir şekilde devam edemedim, kusura bakmayın.

Önceki dersimizde, python ctypes ile pointer kullanıma ve iki farklı ctypes pointer türünün arasındaki farkı inceleyerek örnek yapmıştık. Bugün ki yazım da pointer kavramını biraz daha ileriye taşıyacağız.

Address-of Operator: &

C ve C++ dillerinden bilindiği üzere & operatörü herhangi bir ifadenin adresini bize bildirir ve göstergelerle (pointer) işlem yaparken sıklıkla kullandığımız operatörlerden birisidir. Python ctypes ile çalışırken aynı görevi ctypes.byref() fonksiyonu görmektedir.

Python

C

Hemen bir örnekle pekiştirelim,

Python

C

Yetmez bir tane daha

Python

C


fmdogancan.dll dosyası

Ek olarak şunu bilmenizde de fayda var,

Python

C

 

Casting

Pointer atanmış değişkenlerde tür dönüşümü sağlamak için python ctypes.cast() fonksiyonunu kullanmamız gerekiyor. Öncelikle bu fonksiyonun kullanımını bir inceleyelim daha sonra kendi kullandığım pratik fonksiyonları da işin içine katarız.

ctypes.cast(obj,type)

  • obj: Gösterge olarak yorumlanabilen bir ctypes nesnesi olmalıdır.
  • type: (Pointer) Göstergeli bir tür olmak zorundadır.

En basit kullanım;

Python

Çıktı

Python id() fonksiyonu ile birlikte kullanım.

Python

Çıktı

Tadından yenmez fonksiyonlar,

Fonksiyonlar

Kullanım

Çıktı

ctypes.addressof()

İlk parametresine ctypes türü olarak girilen nesnenin ara bellekteki (memory buffer) adresini integer olarak döndürür. CPython id() fonksiyonuyla geri döndürülen integer değeri arasında 28byte fark olmasın dışında bir fark yok diyebiliriz. Bu 28byte farkın sebebi ise (aşağıdaki örneğe göre), c_int asıl int değeri önceki Python metadata içerisinde olmasından kaynaklanır.

Python

Çıktı

Yukarıdaki örnekle de halen flaşınız patlamadıysa, ctypes’ın header dosyasını incelemeniz de fayda var.

Leave a Reply

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