DLL Einbinden (Win32API?)

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
DIDI1983
User
Beiträge: 3
Registriert: Dienstag 13. Januar 2009, 16:54

Hallo zusammen,

ich hab schon zahlreiche Beitraäge gelesen aber leider konnte ich nirgends eine Lösung zu meinem Problem finden.

Ich habe eine DLL die wie folgt lautet SglW32.dll und diese muss ich in meine Python anwendung integrieren damit ich einen Dongle ansprechen kann. Ich habe es schon mit der WIN32API oder Ctypes versucht aber jedes mal ohne erfolg.

Ziel ist es die Funktion SglSearchLock in der DLL aufzurufen. Beschrieben wird diese Funktion wiefolgt:
ULONG SglSearchLock(ULONG ProductID);

Hat einer von euch eine Lösung?

Hab auch schon den Hersteller kontaktiert aber der hat leider keine Ahnung von Python und hat nur folgendes dazu geschrieben:

Die Funktionen der SGLW32.Dll sind nicht nach der C-Aufrufkonvention
erstellt, vielmehr nach der Windows-typischen __stdcall Aufrufkonvention.
Das ist dieselbe, wie sie bei allen Windows API-Funktionen benutzt wird.
Wenn Sie ein funktionierendes Beispiel für den Aufruf eine
WIN32-API-Funktion haben, dürfte es nicht schwer sein auch eine SG-Lock
API-Funktion aufzurufen.


Wenn das mal funktionierten sollte gibt es noch eine SGLW32.h die ich nach Python potieren muss um auch dort Funktionen aufzurufen...
Dazu hat mir der Hersteller folgendes geschrieben:
SglAuthent() ist tatsächlich keine in der SGLW32.Dll enthaltene
Funktion, dort ist SglAuthentA() und SglAuthentB() enthalten. Die beiden
Funktionen werden von SglAuthent() aufgerufen.SglAuthent() müssen Sie
nach Python portieren. Als Referenz dafür empfehle ich die C/C++
Headerdatei.


Wäre super wenn mir einer helfen könnte.

GRuss Steffen
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

DIDI1983 hat geschrieben:Ich habe es schon mit der WIN32API oder Ctypes versucht aber jedes mal ohne erfolg.
Warum ohne Erfolg? Was genau hat da nicht funktioniert?
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Ich hoffe das hilft dir vllt. ein bisschen weiter,
ich habe mal ctypes benutzt um die netapi32.dll
zu nutzen, hier mein Code:

Code: Alles auswählen

# -*- coding: cp1252 -*-
import ctypes

windll = ctypes.windll.LoadLibrary(r"C:\WINDOWS\system32\netapi32.dll")

def NameAdd(servername, name):
    back = windll.NetMessageNameAdd(servername, name)
    return back

def NameDel(servername, name):
    back = windll.NetMessageNameDel(servername, name)
    return back

def SendMessage(servername, msgname, fromname, buf):
    buflen = len(buf)*2
    back = windll.NetMessageBufferSend(servername,
                                       msgname,
                                       fromname,
                                       buf,
                                       buflen)
    return back 

def SendApp():
    servername = None
    msgname=unicode(raw_input("Empfaenger:"))
    buf = unicode(raw_input("Nachricht:"))
    fromname = unicode(raw_input("Absender:"))
    errNA = NameAdd(servername, fromname)
    errSM = SendMessage(servername, msgname, fromname, buf)
    errND = NameDel(servername, fromname)
    print "Errorcodes: NameAdd:%i/SendMessage:%i/NameDel:%i" % \
          (errNA,errSM,errND)

if __name__ == '__main__':
    SendApp()
Lg, Jonas 8)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Jonas, dein Programm geht davon aus, das Windows in C:\Windows installiert ist. Das ist bei vielen der Fall, aber nicht bei den meisten. Ich denke den Pfad da anzugeben ist völlig unnötig, da Libraries in System32 wohl von selbst gefunden werden sollten.

Und ja, wenn stdcall verwendet werden soll, dann muss man ``windll`` nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten