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
DLL Einbinden (Win32API?)
Ich hoffe das hilft dir vllt. ein bisschen weiter,
ich habe mal ctypes benutzt um die netapi32.dll
zu nutzen, hier mein Code:
Lg, Jonas
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()
-
- 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.
Und ja, wenn stdcall verwendet werden soll, dann muss man ``windll`` nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice