Entwickler-Ecke
Dateizugriff - Problem mit DLL einbindung
Henry - Fr 09.05.03 22:54
Titel: Problem mit DLL einbindung
Hallo,
ich habe da ein kleines Problem mit der einbindung einer DLL.
Ich möchte eine DLL in Mein Programm einbinden und weiß auch die Funtions-/Procedurenamen
und den .
Was ich aber nicht weiß, sind Die Parameter die übergeben werden müssen.
Wenn ich eine DLL einbinden möchte, ist mir das Folgendermaßen bekannt:
Quelltext
1: 2: 3:
| ... Procedure test(text:String) : Boolean; StdCall; external 'test.dll'; ... |
Dazu ist es aber notwendig zu wissen welche Werte ich übergeben muß.
Kann man eine Function oder Procedure auch einbinden ohne die Übergabeparameter zu kennen?
Habe soetwas als Beispiel zum Einbinden, kann mir daraus aber nicht die Variablentypen
ableiten die in Delphi verwendet werden (string...)
Hier eines der Beispiele das ich zur DLL habe (ich glaube C++)
Parameter:
1. int:
Laufwerk 0 => A, 1 => B
2. USERDATA:
Struktur für die Benutzerdaten
Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| #include "copyp32.h" int main() { USERDATA ud;
if (GetUserData(0,ud)==true) { printf("Product:%s\n",ud.Product); printf("Company:%s\n",ud.Company); printf("Version:%s\n",ud.Version); printf("Comment:%s\n",ud.Comment); } }
Die USERDATA Struktur hat folgenden Aufbau:
struct USERDATA { char Company[STRINGLEN_USERDATA+1];
char Version[STRINGLEN_USERDATA+1]; char Product[STRINGLEN_USERDATA+1]; char Comment[STRINGLEN_USERDATA+1]; } Company: Firmenname Version: Version des Produktes (=geschütztes Programm) Product: Name des Produktes (=geschütztes Programm) Comment: Kommentar, Seriennummer etc... |
Kann mir jemand helfen?
Danke im voraus
Henry - Fr 09.05.03 23:20
Habe da noch Beispiele in VB gefunden.
Damit kann ich schon mehr anfangen.
Da wäre allerdings noch folgendes Problem:
Wie kann ich folgendes in Delphi realisieren?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| //VB Code //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 |
Kann mir da jemand Helfen? Dann wäre ich schon einen großen Schritt weiter.
Delete - Sa 10.05.03 09:19
Du solltest in Erfahrung bringen, welche Länge "STRINGLEN_USERDATA" hat. Dieser Wert ist für die PChars wichtig. In Delphi sähe die Deklaration von USERDATA dann so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| const STRINGLEN_USERDATA = ???; // Größenangabe in Bytes (= Chars) type USERDATA = record Company, Version, Product, Comment : array[0..STRINGLEN_USERDATA]of char; end; |
Henry - Sa 10.05.03 13:04
Hallo Matthias,
Danke erstmal für Deine Hilfe, hat mich einen Schritt weiter gebracht.
Die Konstanten habe ich auch noch bei den VB Beispielen gefunden.
Nun habe ich aber festgestellt, das ich doch noch ein paar Probleme Habe mir den VB Code in Delphi zu übertragen.
Hier noch einmal zwei der Beipiele zur Einbindung der DLL in VB:
Quelltext
1: 2:
| Private Declare Function GetUserData Lib "copyp32.dll" (ByVal x As Long, data As USERDATA) As Boolean Private Declare Function GetDongleData Lib "copyp32.dll" (ByVal drive As Long, data As DONGLEDATA, ByVal Code As String) As Boolean |
Hier meine daraus abgeleiten Funktion in Delphi:
Quelltext
1: 2:
| Function GetUserData(Laufwerk:Integer;daten: USERDATA):Boolean; StdCall; external DLL; Function GetDongleData(Laufwerk:Integer;daten:DONGLEDATA;Code:String):Boolean; StdCall; external DLL; |
Nun ist ja in einer der Funktion z.B. der Parameter "data as Userdata" bzw. in meiner "daten:Dongledata" angegeben. Das würde für mich heißen, das ich diesen mit übergeben müßte.
In einem Beispiel zum aufruf geht aber (meines Erachtens) hervor, das diese Daten von der DLL zurückgegeben werden.
Hier das dazugehörige Beispel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| ... 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 ... |
Hier meine Einbindung:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... procedure TForm1.Button1Click(Sender: TObject); Daten : DONGLEDATA; begin If GetDongleData(0,daten,'Code') = True then Begin Memo1.Text := Daten.LicenceKey;
End; end; |
Mache ich da einen Denkfehler?
Delete - Sa 10.05.03 18:05
Für verwertbare Ergebnisse musst du IMO die beiden Variablen namens "daten" als VAR deklarieren:
Quelltext
1: 2: 3: 4: 5:
| function GetUserData(Laufwerk: integer; var daten: USERDATA): boolean; stdcall; external DLL;
function GetDongleData(Laufwerk: integer; var daten: DONGLEDATA; Code: string): boolean; stdcall; external DLL; |
Henry - Sa 10.05.03 18:50
Super, das werde ich gleich mal probieren.
Melde mich dann wieder :D
AndyB - Sa 10.05.03 19:21
Titel: Re: Problem mit DLL einbindung
Hab die anderen Postings nicht gesehen.
Henry - Sa 10.05.03 20:46
So,
ich habe die wichtigsetn Funktionen eingebunden bekommen. Die anderen funktionieren aus irgendeinem Grunde nicht, das muß aber an der DLL liegen.
Schönen Dank nochmal.
@AndyB: welche anderen Postings :?:
AndyB - Sa 10.05.03 21:48
Mein Text bezog sich auf das 1. Posting. Die anderen hatten im Browserfenster keinen Platz und somit war mein Posting überfüssig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!