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
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.
Nasıl Python sistem hostname almak içi...
Memoization nedir ve nasıl Python kull...
Nasıl çalıştırmadan, Python komut dosy...
Nasıl Vim Python kullanabilir miyim?...
JSON dosyası içinde yorum kullanabilir...