2009-12-21 29 views
15

Aşağıdaki kodu kullanarak Python dll yüklenirken ediyorum:WindowsError: [Hata 126] Belirtilen modül bulunamadı

if os.path.exists(dll_path): 
    my_dll = ctypes.cdll.LoadLibrary(dll_path) 

Ama sürekli aşağıdaki hatayı

WindowsError alıyorum: [ Hata 126] Belirtilen modül belirtilen yol bulunamadı

dll bulunamadı, ancak ben hata alıyorum neden anlamıyorum.

+0

İçeri aktarmaya çalıştığınız DLL'yi ve bu DLL dosyasının ne yaptığını ayrıntılandırabilir misiniz? Kendisi bulamadığı başka bir DLL yüklemeye çalışıyor olabilir. – santosc

+0

[Bu soru] yanıtı (http://stackoverflow.com/questions/2334627/error-loading-dll-in-path-with-parenthesis-using-ctypes-python) benim için çözdü - yinelenen? '>>> ctypes.windll.UseR32.MessageBoxA' ' <_FuncPtr: Hala karışık durumda kullanabilirsiniz - yanlış – Junuxx

cevap

12

derlemek tümü küçük karakter olmalıdır - yolunda ters eğik çizgiler vardır çünkü genellikle hangi dönüştürülür.

Örneğin - aşağıdakiler başarısız olur - çünkü dizede \ t, SEKME karakterine dönüştürülür.

>>> import ctypes 
>>> ctypes.windll.LoadLibrary("c:\tools\depends\depends.dll") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "c:\tools\python271\lib\ctypes\__init__.py", line 431, in LoadLibrary 
    return self._dlltype(name) 
    File "c:\tools\python271\lib\ctypes\__init__.py", line 353, in __init__ 
    self._handle = _dlopen(self._name, mode) 
WindowsError: [Error 126] The specified module could not be found 

(yani sorun ise)

a) çift eğik çizgi kullanın ...

>>> import ctypes 
>>> ctypes.windll.LoadLibrary("c:\\tools\\depends\\depends.dll") 

b) ileri kullanmak

>>> import ctypes 
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll") 

c eğik 3 çözümler vardır) RAW dizeleri kullan (dize öncelen r

>>> import ctypes 
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll") 

Bu üçüncüsü çalışırken - Zaman zaman 'doğru' olarak görülmediği izlenimini aldım çünkü RAW dizeleri normal ifadeler için kullanıldı. Python'da Windows'taki yollarda sorun yaşamadan yıllar boyunca kullandım :))

-3

kontrol edin dll adı .. herhangi bir büyük harf içermemelidir .. ben böyle şeyler gördüğünüzde başarıyla

+0

a), Windows Yollar ctypes.windll.dll_name kullanırken bile) duyarlı b harf ayrımı yapılmaz nesne 0x01DEA648> ' – markm

0

Ayrıca bu, uygulama dizininin çalışabilmesi için tutulma sırasındaki çalışma dizinini ayarlamayı unutmuş olmanız olabilir.

14

Not: DLL yolunuzda olsa bile. Bu DLL, yolunuzdaki diğer DLL'lere dayanıyorsa, aynı hatayı alabilirsiniz. Windows bu durumda bir bağımlılık bulamadı. Windows, neyi bulamadığını, ne de bir şey bulamadığını söylemekte gerçekten iyi değildir. Bunu anlamanız sana kalmış. Windows dll arama yolu şu adreste bulunabilir: http://msdn.microsoft.com/en-us/library/7d83bc18.aspx

Benim durumumda, gereken tüm dosyaların aynı dizinde olduğundan ve bu dizinin os.chdir() işlevini yapması sorunu çözdü.

+3

Sadece" os.chdir() "(bu sorunu işlemenin doğru yolu olup olmadığından emin olmadığım halde) işaretli yanıtta belirtilen seçenekleri denedikten sonra bana yardımcı olduğunu belirtmek için – JavierQQ23

+0

Kullanmaya bir alternatif os.chdir(), dlls ile dizinin yolunda olduğundan emin olmaktır. Her iki yol da Windows'un dll'leri bulmasını sağlar –

1

Aynı sorunu Win10 32bit işletim sisteminde de gördüm. Ben hata ayıklama sürümünü yayımlamak için DLL değiştirerek sorunu çözdüm.

Bunun nedeni, hata ayıklama sürümü DLL'sinin DLL dosyasının diğer sürümlerine bağlı olması ve sürüm sürümünün kullanılmamasıdır.

İlgili konular