SORU
31 EKİM 2008, Cuma


Nasıl Python DLL DOSYASı kullanabilir miyim?

Python içinde DLL dosyası kullanmak için en kolay yolu nedir?

Özellikle, bu nasıl yapılabilirolmadanPython için herhangi bir ek sarıcı işlevleri açığa çıkarmak için bir C kodu yazmak?

Yerli Python işlevselliği güçlü üçüncü parti bir kütüphane kullanarak tercih edilir.

CEVAP
31 EKİM 2008, Cuma


ctypes gitmek için yol olduğunu düşünüyorum.

Ctypes aşağıdaki örnek yazdım gerçek kod (Python 2.5). Bu, şimdiye kadar, istediğini yapmak için bulduğum en kolay yol olmuştur.

import ctypes

# Load DLL into memory.

hllDll = ctypes.WinDLL ("c:\\PComm\\ehlapi32.dll")

# Set up prototype and parameters for the desired function call.
# HLLAPI

hllApiProto = ctypes.WINFUNCTYPE (ctypes.c_int,ctypes.c_void_p,
    ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p)
hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3",0), (1, "p4",0),

# Actually map the call ("HLLAPI(...)") to a Python name.

hllApi = hllApiProto (("HLLAPI", hllDll), hllApiParams)

# This is how you can actually call the DLL function.
# Set up the variables and call the Python name with them.

p1 = ctypes.c_int (1)
p2 = ctypes.c_char_p (sessionVar)
p3 = ctypes.c_int (1)
p4 = ctypes.c_int (0)
hllApi (ctypes.byref (p1), p2, ctypes.byref (p3), ctypes.byref (p4))

ctypes bir şeyler var C-tipi veri türleri (int, char, short, void*, vb.) ve by-pass değer ya da başvuru. Ayrıca benim örnek (HLL API bir değişken başvurusu tarafından geçirilen değiştirerek değerler verir) yapmaz rağmen, belirli veri türlerini döndürür.


Belirli yukarıda gösterilen örnek açısından, IBM'İN EHLLAPİ oldukça tutarlı bir arayüz.

Tüm aramalar pass dört void işaretçiler (EHLLAPİ gönderir dönüş kodu geri dördüncü parametre, bir işaretçi için bir int - ben belirtmek int dönüş türü, ben güvenli bir şekilde göz ardı) göre IBM belgelerine here.

Bunu yapan bir tek, basit ctypes işlev yapar bir şey EHLLAPİ kütüphane sağlar, ama büyük olasılıkla başka kütüphanelere ihtiyacı vardır ayrı ctypes fonksiyonu ayarlamak başına kütüphane işlevi.

WINFUNCTYPE gelen bir dönüş değeri bir işlev prototip olmasına rağmen hala daha fazla parametre bilgilerini (ve türleri üzerinde) kurmak zorunda. Her başlık hllApiParams bir parametre "yön" (1 = Giriş, 2 = çıkış), parametre adı ve varsayılan değer görmek ctypes doco için Ayrıntılar

Prototip ve parametre bilgileri bir kez, bir Python "hllApi işlevini çağırın." çağrılabilir oluşturabilirsiniz Sadece gerekli değişken (p1 benim durumumda p4) oluşturun ve onlarla işlevini çağırın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009