Funktion aus DLL nutzen

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.
Antworten
timi82
User
Beiträge: 15
Registriert: Dienstag 4. September 2007, 13:57

Hallo zusammen,
hab da ein Problem.
Und zwar habe ich eine dll namens seed.dll in die Hand gedrückt bekommen welche wohl die Funktion seed() enthält.
Ich soll nun dafür sorgen das man diese Funktion unter Python nutzen kann.
Über die dll habe ich keine weitern Informationen.

Wenn ich versuche sie mit

Code: Alles auswählen

import seed.dll
zu laden kommt folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in -toplevel-
    import seed.dll
ImportError: dynamic module does not define init function (initseed)
Jemand eine Idee was da zu tun ist, oder ist das überhaupt nicht möglich?

Timi
Zuletzt geändert von timi82 am Donnerstag 13. September 2007, 13:39, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du kannst C-DLLs mit dem Modul ctypes ansprechen. Schau dazu einfach mal in die Doku!
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
timi82
User
Beiträge: 15
Registriert: Dienstag 4. September 2007, 13:57

Aber dazu muß ich doch wissen was in der dll drin steht, oder?

Sind dll immer C-Code?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

timi82 hat geschrieben:Aber dazu muß ich doch wissen was in der dll drin steht, oder?
Weißt du doch. Sie enthält eine Funktion ``seed()``, wie du selbst sagtest. Jetzt wäre es noch gut zu wissen welche Typen sie als Parameter erwartet und welche Rückgabewerte sie hat (also quasi den Prototyp der Funktion).
timi82 hat geschrieben:Sind dll immer C-Code?
Nein, aber C-DLLs machen am wenigsten Probleme.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
timi82
User
Beiträge: 15
Registriert: Dienstag 4. September 2007, 13:57

Blick aber immer noch nicht wie ich die dll jetzt importiren kann.
lunar

timi82 hat geschrieben:Blick aber immer noch nicht wie ich die dll jetzt importiren kann.
Sollen wir dir jetzt die Python-Dokumentation vorlesen? Leonidas hat dir doch genau das Modul genannt, welches dich zum Ziel führt :roll:
BlackJack

Und speziell bei dem Modul zieht noch nicht einmal das "in der Python-Doku sind zu wenig Beispiele"-Argument ─ da ist ein ganzes Tutorial dabei.
timi82
User
Beiträge: 15
Registriert: Dienstag 4. September 2007, 13:57

Aber ctypes funktioniert doch nur für C-Code.
Woher weiß ich denn das die dll in C ist?
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

timi82 hat geschrieben:Aber ctypes funktioniert doch nur für C-Code.
Woher weiß ich denn das die dll in C ist?
Wie wärs mit fragen, am besten den Author?
Woher sollen wir es denn wissen was das *genau* für eine dll ist?

Auserdem werde ich das gefühl nicht los, das als 1. Python Aufgabe C-Funktionen zu wrappen nicht die beste idee ist.
Zuletzt geändert von Mad-Marty am Donnerstag 13. September 2007, 12:36, insgesamt 1-mal geändert.
timi82
User
Beiträge: 15
Registriert: Dienstag 4. September 2007, 13:57

Ahh... jetzt blick ich's langsam.

Ist es eigentlich richtig das ich mit dir(cdll.seed) alle funktion in seed.dll angezeigt bekommen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

timi82 hat geschrieben:Ist es eigentlich richtig das ich mit dir(cdll.seed) alle funktion in seed.dll angezeigt bekommen?
Nein, in der Regel nicht, da ctypes soweit ich mich erinnere keine Auto-Discovery hat. Auch wenn es die hätte, würde das nur bedingt viel bringen, da die Argumente und Rückgabewerte immer noch unbekannt sind.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
timi82
User
Beiträge: 15
Registriert: Dienstag 4. September 2007, 13:57

So, wenn ich die Funktion jetzt mit cdll.seed.seed()
aufrufe erscheint folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in -toplevel-
    cdll.seed.seed()
WindowsError: exception: access violation writing 0x807058CC
Hat das mit den fehlenden Parametern zu tun?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

timi82 hat geschrieben:Hat das mit den fehlenden Parametern zu tun?
Ja, gut möglich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten