Autor Beitrag
Henry
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Fr 09.05.03 22:54 
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:
ausblenden 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:
ausblenden 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

_________________
mfg Henry
Henry Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: 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?


ausblenden 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.

_________________
mfg Henry
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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:
ausblenden 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:
ausblenden 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?

_________________
mfg Henry
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.05.03 18:05 
Für verwertbare Ergebnisse musst du IMO die beiden Variablen namens "daten" als VAR deklarieren:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Sa 10.05.03 18:50 
Super, das werde ich gleich mal probieren.
Melde mich dann wieder :D

_________________
mfg Henry
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 10.05.03 19:21 
Hab die anderen Postings nicht gesehen.

_________________
Ist Zeit wirklich Geld?
Henry Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: 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 :?:

_________________
mfg Henry
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?