Pfad einer dll, ctypes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Pfad einer dll, ctypes

Beitragvon JR » Montag 14. April 2008, 11:55

Hallo!

Leider bin ich nicht fündig geworden und deshalb folgende Frage:

Ich verwende ctypes und möchte eine *.dll mit

Code: Alles auswählen

ctypes.cdll.LoadLibrary("C:\C16\Temp\easyffi32.dll")


ohne den Pfad C:\C16\Temp vorher in die Umgebungsvariable "PATH" zu schreiben. Ist dies möglich?

Ich bekomme immer den Fehler

Code: Alles auswählen

WindowsError: [Error 126] Das angegebene Modul wurde nicht gefunden


Wenn ich meine *.dll in C:\WINDOWS\system32 ablege, geht es "natürlich".
Vielen Dank und Grüße
JR
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Montag 14. April 2008, 12:04

ersetz mal die \ durch /, dann muesste das gehen. Denn \ in Strings bedeutet ja was anders. Python kommt auf allen Plattformen glaube ich mit / als Pfadtrenner klar.

Alternativ koenntest Du auch einen Raw-String draus machen, das koennte auch gehen:

Code: Alles auswählen

ctypes.cdll.LoadLibrary(r"C:\C16\Temp\easyffi32.dll")
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Montag 14. April 2008, 12:26

Hi!

Ich habe in meinem Code "\\" benutzt. Bringt leider nix!

Gruß
JR
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Montag 14. April 2008, 15:11

Probier mal in Python:

Code: Alles auswählen

import sys
sys.path.append("Pfad/zu/der/dll")

und dann nur dll Namen angeben

*edit*
ich nehme es zurück, geht nicht ;-)

das geht:

Code: Alles auswählen

ctypes.cdll.LoadLibrary("C:\\Program Files\\VirtualDub\\vdsvrlnk64.dll")
ctypes.cdll.LoadLibrary(r"C:\Program Files\VirtualDub\vdsvrlnk64.dll")
ctypes.cdll.LoadLibrary("C:/Program Files/VirtualDub/vdsvrlnk64.dll")
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Montag 14. April 2008, 15:16

Hi!

Auf die Idee kam ich auch schon, klappt leider ebenfalls nicht.
Trotzdem danke für den Tipp!

Gruß
JR
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Montag 14. April 2008, 15:19

Wie sieht es relativ aus, wenn die Python Datei und die DLL im gleichen Ordner liegen und du nur den Namen angibst?

Wie gesagt bei mir (Python 2.5) gehen alle Varianten.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Beitragvon Masaru » Dienstag 15. April 2008, 09:43

Unter Python 2.3 hab ich auch keine Schwierigkeiten:

Code: Alles auswählen

>>> import ctypes as ct
>>> tll =  ct.cdll.LoadLibrary(r'E:\work\c_testdll\Release\libc_testdll.dll')
>>> # ... funxt

>>Masaru<<
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Dienstag 15. April 2008, 10:00

Hast du ev. irgendwelche abhängigen DLLs nicht? Also die esayffi32.dll braucht vielleicht no andere DLLs.

Gruss

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder