Aktuelle Zeit: 15.11.2019 00:05

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme DLL Aufruf
BeitragVerfasst: 13.09.2004 14:39 
Offline
Benutzeravatar

Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad
Hallo,

habe beim portieren eines VB-Projektes :evil: 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 :allright: 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 :cry:. Vieleicht kann mir jemand von Euch sagen warum??? :praise:

Den kompletten Sourecode inklusive der Lizenzierungsdatei sowie der DLL-Beschreibung könnte ich Euch mailen.

Hier ein Auszug aus dem PB-Projekt:

Code:
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]


Und so ist es in VB:

Code:
'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
   ...


TNX

Mueckerich
Code:

_________________
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.09.2004 15:31 
Offline
Benutzeravatar

Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest
hi mueckerich,

so auf den ersten blick fällt mir auf das LicData keine strukturzuweisung hat.
vielleicht liegt es daran....

evtl mal Global LicData.CPLicFile am anfang reinhauen....

mfG
ChaOsKid


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.09.2004 22:56 
Offline
Benutzeravatar

Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad
Hi ChaOsKid
TNX :allright:
habe nur vergessen den folgenden Teil mit den Zuweisungen in den Code reinzukopieren,
Code:
CopyP32 Variablendekladarionen
;{
Global CP_LibOpen.b                                       ;Flag ob Library bereits geöffnet ist
Global LicData.CPLicFile
Global UserData.CPUserData
Global DongleData.CPDongleData

ist also schon drin, mag aber dennoch nicht.
Manchmal schmiert das Prog auch nicht ab, dann sind die Variablen aber nach dem DLL-Aufruf immer noch leer, bzw immer noch mit den alten Werten befüllt. Habe bereits die CallCFunction ausprobiert, gleiches Ergebnis :cry: . Langsam gehen mir die Ideen aus.

_________________
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye