habe beim portieren eines VB-Projektes auf PB ein Problem mit einer DLL. Die DLL dient dazu eine Lizenzierung die sich als Datei auf der HD befindet auszulesen. (TNX an Frank Franzoni für CopYProtector - leider hat er das Prog. (Freeware) nicht mehr auf seiner Page www.franzoni-online.de)
Unter VB funzt das ganze. Vor dem Aufruf der Funktion in der Copy32.DLL kann ich die Strukturelemente mit dem Debug anzeigen. nach dem Aufruf schmiert das Prog. beim Zugriff auf der Strukturelemente ohne Fehlermeldung sang und klanglos ab . Vieleicht kann mir jemand von Euch sagen warum???
Den kompletten Sourecode inklusive der Lizenzierungsdatei sowie der DLL-Beschreibung könnte ich Euch mailen.
Hier ein Auszug aus dem PB-Projekt:
Code: Alles auswählen
Enumeration
#CP32DLL
EndEnumeration
Structure CPLicFile
LF_User.s
LF_Company.s
LF_Product.s
LF_SystemID.s
EndStructure
Procedure CP_GetLicenseFileData(LicFile.s, LicKey.s)
;Lesen der Lizenzdaten aus der Lizenzierungsdatei
LicData\LF_User = Space(#STRINGLEN_USERDATA+1) + "USER"
LicData\LF_Company = Space(#STRINGLEN_USERDATA+1) + "COMPANY"
LicData\LF_Product = Space(#STRINGLEN_USERDATA+1) + "PRODUCT"
LicData\LF_SystemID = Space(#STRINGLEN_SYSTEMID+1) + "SYTEM_ID"
CallDebugger
Debug "STUKTURINHALT VOR AUFRUF DER DLL"
Debug LicData\LF_Company
Debug Len(LicData\LF_Company)
Debug LicData\LF_Product
Debug Len(LicData\LF_Product)
Debug LicData\LF_SystemID
Debug Len(LicData\LF_SystemID)
Debug LicData\LF_User
Debug Len(LicData\LF_User)
If CP_LibOpen = #False
ProcedureReturn
EndIf
If LicFile = ""
ProcedureReturn
EndIf
CallFunction(#CP32DLL, "GetLicenseFile", LicFile, @LicData, LicKey, #False )
CallDebugger
Debug LicData\LF_Company
Debug Len(LicData\LF_Company)
Debug LicData\LF_Product
Debug Len(LicData\LF_Product)
Debug LicData\LF_SystemID
Debug Len(LicData\LF_SystemID)
Debug LicData\LF_User
Debug Len(LicData\LF_User)
CallDebugger
EndProcedure
If OpenLibrary(#CP32DLL,"CopyP32.DLL")
CP_GetLicenseFileData("C:\TEST.LIC","test")
EndIf[/color]
Code: Alles auswählen
'Konstanten
'Länge der Strings in der USERDATA Struktur
Const STRINGLEN_USERDATA = 40
'Länge des LicenceKey Strings
Const STRINGLEN_LICENCEKEY = 28
'Länge der eindeutigen SystemID
Const STRINGLEN_SYSTEMID = 12
'Länge des Version Strings
Const STRINGLEN_COPYPVERSION = 10
'Länge der Seriennummer
Const STRINGLEN_SERIALNUMBER = 5
'ID's für die Berechnung einer eindeutigen SystemID
Const ID_DEFAUL T= 0
Const ID_MACADDR = 1
Const ID_PRODUCTID = 2
Const ID_REGISTERD = 3
'Weiterhin muß Visual Basic die Strukturen USERDATA, DONGLEDATA und LICENCEFILE bekannt gemacht werden.
'USERDATA Struktur zur Aufnahme der Benutzerdaten von der Dongle Diskette
Private Type USERDATA
Company As String * STRINGLEN_USERDATA+1
Version As String * STRINGLEN_USERDATA+1
Product As String * STRINGLEN_USERDATA+1
Comment As String * STRINGLEN_USERDATA+1
End Type
'DONGLEDATA Struktur zur Aufnahme der Donglerdaten von der Dongle Diskette
Private Type DONGLEDATA
LicenceKey As String * STRINGLEN_LICENCEKEY+1
SystemID As String * STRINGLEN_SYSTEMID+1
CP_Version As String * STRINGLEN_COPYPVERSION+1
SerialNumber * STRINGLEN_SERIALNUMBER+1
End Type
'LICENSEFILE Struktur zur Aufnahme der Daten einer Lizenzdatei
Private Type LICENCEFILE
User As String * STRINGLEN_USERDATA+1
Company As String * STRINGLEN_USERDATA+1
Product As String * STRINGLEN_USERDATA+1
SystemID As String * STRINGLEN_SYSTEMID+1
End Type
'Damit Visual Basic die Funktionen der 'copyp32.dll' aufrufen kann, müssen diese über Declare-Anweisungen eingebunden werden.
Private Declare Function GetUserData Lib "copyp32.dll" (ByVal x As Long, data As USERDATA) As Boolean
Private Declare Function GetAllowedWindowsVersions Lib "copyp32.dll" (ByVal drive As Long, ByVal sys As String, ByVal ver As String) As Boolean
Private Declare Function CalcSystemID Lib "copyp32.dll" (ByVal id As String, ByVal typ As Long) As Boolean
Private Declare Function GetDongleData Lib "copyp32.dll" (ByVal drive As Long, data As DONGLEDATA, ByVal Code As String) As Boolean
Private Declare Function GetTokenCount Lib "copyp32.dll" (ByVal drive As Long, token As Long, ByVal Code As String) As Boolean
Private Declare Function SetTokenCount Lib "copyp32.dll" (ByVal drive As Long, ByVal token As Long, ByVal Code As String) As Boolean
Private Declare Function SetSystemID Lib "copyp32.dll" (ByVal drive As Long, ByVal id As String, ByVal Code As String) As Boolean
Private Declare Function WriteLicenseFile Lib "copyp32.dll" (ByVal file As String, data As LICENCEFILE, ByVal Code As String, ByVal Registry As Boolean) As Boolean
Private Declare Function GetLicenseFile Lib "copyp32.dll" (ByVal file As String, data As LICENCEFILE, ByVal Code As String, ByVal Registry As Boolean) As Boolean
'Jetzt können die Funktionen aufgerufen werden.
'Beispiel:
...
Dim data As DONGLEDATA
Dim Code As String
Code =... 'Hier wird die Codierung eingetragen
If GetDongleData(0, data, Code) Then
textLizenz.Text = data.LicenceKey
textSystemID.Text = data.SystemID
textCPVersion.Text = data.CP_Version
textSerialNumber = data.SerialNumber
End If
...
Mueckerich
Code: Alles auswählen