string in byte array
string in byte array
Hallo,
eine Funktion in einer DLL (AHid.dll) will als 2. Parameter einen String
in einem Byte-Array.
Im Beispiel(vb.NET) wird das so gemacht:
Dim parm1 As Byte()
'Enter license information here.
parm1 = System.Text.Encoding.ASCII.GetBytes("0")
DLL-Funktion:
AHid_Init(HWnd, parm1)
Wie kann man das in PB machen?
Danke für Hilfe.
Gruß Georg
PB 5.31
Vista 32bit
eine Funktion in einer DLL (AHid.dll) will als 2. Parameter einen String
in einem Byte-Array.
Im Beispiel(vb.NET) wird das so gemacht:
Dim parm1 As Byte()
'Enter license information here.
parm1 = System.Text.Encoding.ASCII.GetBytes("0")
DLL-Funktion:
AHid_Init(HWnd, parm1)
Wie kann man das in PB machen?
Danke für Hilfe.
Gruß Georg
PB 5.31
Vista 32bit
Re: string in byte array
Ich würde einfach die Adresse des Strings übergeben.
AHid_Init(HWnd, @string)
gegeben falls vorher noch in ASCII umwandeln, falls Du als Unicode kompilierst.
AHid_Init(HWnd, @string)
gegeben falls vorher noch in ASCII umwandeln, falls Du als Unicode kompilierst.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: string in byte array
Hallo _JON_
hatte ich schon ohne Erfolg versucht.
hatte ich schon ohne Erfolg versucht.
Re: string in byte array
So klappt es bei mir, wenn ich "AHid_Init" weg lasse kommt die Info:
"Dear customer, your Trial Period has expired."
mit "AHid_Init":
"Dear customer, your Trial Period expires in 30 day(s)."
"Dear customer, your Trial Period has expired."
mit "AHid_Init":
"Dear customer, your Trial Period expires in 30 day(s)."
Code: Alles auswählen
EnableExplicit
IncludeFile "AHid.pbi"
Define *parm1, res.i, hwnd.i
*parm1 = AllocateMemory(1024)
If *parm1 = 0
End
EndIf
If AHid_OpenDLL()
PokeS(*parm1, "0", -1, #PB_Ascii)
res = AHid_Init(hwnd, *parm1)
Debug res
AHid_Info()
AHid_CloseDLL()
EndIf
End
PB v5.72 x86/x64
Windows 10 Pro 64bit
Windows 10 Pro 64bit
Re: string in byte array
Hallo -chris-
danke für Dein Antwort.
Auch mit Deiner Version gibt AHid_Init den Wert AHID_LICENSE_ERROR zurück.
Ich habe aber die Dll erst seit ein paar Tagen und war der Meinung, dass man Sie
mit "0" testen kann. (Eingeschränkter Umfang) Wie auf
http://www.mikrocontroller.net/topic/210792 vom Autor beschrieben.
Werde mich mal mit dem Autor in Verbindung setzen.
Nutzt du die Dll? Wenn ja, wie bist Du mit ihr zufrieden?
Gruß Georg
danke für Dein Antwort.
Auch mit Deiner Version gibt AHid_Init den Wert AHID_LICENSE_ERROR zurück.
Ich habe aber die Dll erst seit ein paar Tagen und war der Meinung, dass man Sie
mit "0" testen kann. (Eingeschränkter Umfang) Wie auf
http://www.mikrocontroller.net/topic/210792 vom Autor beschrieben.
Werde mich mal mit dem Autor in Verbindung setzen.
Nutzt du die Dll? Wenn ja, wie bist Du mit ihr zufrieden?
Gruß Georg
Re: string in byte array
Ich benutze die dll nocht nicht , erstmal nur testen.
Ich hab jetzt bemerkt das man die Funktionen mit
PrototypeC deklarieren muss.
Hier meine komplette Include:
Ich hab jetzt bemerkt das man die Funktionen mit
PrototypeC deklarieren muss.
Hier meine komplette Include:
Code: Alles auswählen
;http://ahidlib.com/
;Windows messages.
#AHID_DEVICECHANGE = #WM_DEVICECHANGE
#AHID_DATARECEIVED = #WM_USER + 101
;Report types.
#AHID_REPTYPE_INT_IN = 0
#AHID_REPTYPE_INT_OUT = 1
#AHID_REPTYPE_FEATURE = 2
;Status values.
#AHID_OK = 0
#AHID_ATTACHED = 1
#AHID_REMOVED = 2
#AHID_NOT_LISTED = 3
#AHID_IO_ERROR = 4
#AHID_NOT_INITIALIZED = 5
#AHID_LICENSE_ERROR = 6
#AHID_OTHER_ERROR = 7
#AHID_WRONG_PARAMETER = 8
#AHID_NOT_INVOLVED = 9
#AHID_OS_NOT_SUPPORTED = 10
Global AHid_hDLL.i
;- Prototype
PrototypeC.i AHid_Attached(pipe.i, wparm.i, lparm.i)
PrototypeC.i AHid_Deregister(pipe.i)
PrototypeC.i AHid_Find(pipe.i)
PrototypeC.i AHid_Info()
PrototypeC.i AHid_Init(hwnd, *parm1)
PrototypeC.i AHid_Read(pipe.i, *buffer, to_read.i, *read)
PrototypeC.i AHid_Register(*pipe, vid.i, pid.i, mi.i, rep_id.a, rep_size.a, rep_type.a)
PrototypeC.i AHid_Request(pipe.i)
PrototypeC.i AHid_Setup(pipe.i)
PrototypeC.i AHid_Write(pipe.i, *buffer, to_write.i, *written)
Procedure AHid_CloseDLL()
If AHid_hDLL <> 0
If IsLibrary(AHid_hDLL)
CloseLibrary(AHid_hDLL)
EndIf
AHid_hDLL = 0
EndIf
EndProcedure
Procedure AHid_OpenDLL()
AHid_hDLL = OpenLibrary(#PB_Any, "AHid.dll")
If AHid_hDLL = 0
ProcedureReturn #False
EndIf
Global AHid_Attached.AHid_Attached=GetFunction(AHid_hDLL,"AHid_Attached")
Global AHid_Deregister.AHid_Deregister=GetFunction(AHid_hDLL,"AHid_Deregister")
Global AHid_Find.AHid_Find=GetFunction(AHid_hDLL,"AHid_Find")
Global AHid_Info.AHid_Info=GetFunction(AHid_hDLL,"AHid_Info")
Global AHid_Init.AHid_Init=GetFunction(AHid_hDLL,"AHid_Init")
Global AHid_Read.AHid_Read=GetFunction(AHid_hDLL,"AHid_Read")
Global AHid_Register.AHid_Register=GetFunction(AHid_hDLL,"AHid_Register")
Global AHid_Request.AHid_Request=GetFunction(AHid_hDLL,"AHid_Request")
Global AHid_Setup.AHid_Setup=GetFunction(AHid_hDLL,"AHid_Setup")
Global AHid_Write.AHid_Write=GetFunction(AHid_hDLL,"AHid_Write")
ProcedureReturn #True
EndProcedure
Code: Alles auswählen
EnableExplicit
IncludeFile "AHid.pbi"
Define *parm1, res.i, hwnd.i
*parm1 = AllocateMemory(1024)
If *parm1 = 0
End
EndIf
If AHid_OpenDLL()
PokeS(*parm1, "0", -1, #PB_Ascii)
res = AHid_Init(hwnd, *parm1)
Debug res
If res = #AHID_OK
AHid_Info()
EndIf
AHid_CloseDLL()
EndIf
End
PB v5.72 x86/x64
Windows 10 Pro 64bit
Windows 10 Pro 64bit
Re: string in byte array
#AHID_LICENSE_ERROR wird zurück gegeben wenn die 30 Tage abgelaufen sind.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Windows 10 Pro 64bit
Re: string in byte array
Warum musst Du PrototypeC verwenden?
Bei mir funktioniert Prototype bis jetzt ohne Fehler.
Bei mir funktioniert Prototype bis jetzt ohne Fehler.
Re: string in byte array
Hier kommt ohne PrototypeC:
"[15:30:23] [ERROR] Ungültiger Speicherzugriff. (Lesefehler an der Adresse 0)"
"[15:30:23] [ERROR] Ungültiger Speicherzugriff. (Lesefehler an der Adresse 0)"
Code: Alles auswählen
EnableExplicit
IncludeFile "AHid.pbi"
Global *parm1
*parm1 = AllocateMemory(1024)
If *parm1 = 0
End
EndIf
Procedure init()
Protected res.i, hwnd.i
PokeS(*parm1, "012345678", -1, #PB_Ascii)
res = AHid_Init(hwnd, *parm1)
Debug res
AHid_Info()
EndProcedure
If AHid_OpenDLL()
init()
AHid_CloseDLL()
EndIf
End
PB v5.72 x86/x64
Windows 10 Pro 64bit
Windows 10 Pro 64bit
Re: string in byte array
Die Funktionen wurden mit CDECL (in PB z.B. ProcedureC) kompiliert. http://de.wikipedia.org/wiki/Aufrufkonvention
Auch wenn jetzt STDCALL (Standard unter PB) funktionieren mag, frueher oder spaeter fuehrt das zum Absturz.
Auch wenn jetzt STDCALL (Standard unter PB) funktionieren mag, frueher oder spaeter fuehrt das zum Absturz.