Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C dll Aufruf in Delphi (https://www.delphipraxis.net/110776-c-dll-aufruf-delphi.html)

MikeS 24. Mär 2008 17:23


C dll Aufruf in Delphi
 
Hallo zusammen,
kann mit bitte jemand sagen mit welchen Datentypen ich diesen C Dll Aufruf in Delphi umsetzen kann?

Delphi-Quellcode:
long encryptData(char key[], char dec[], char enc[])
Vielen Dank
Mike

mkinzler 24. Mär 2008 17:24

Re: C dll Aufruf in Delphi
 
PChar, PChar, PChar; longint

MikeS 24. Mär 2008 17:32

Re: C dll Aufruf in Delphi
 
Hallo mkinzler,
vielen Dank für die schnelle Antwort. Das mit dem PChar dachte ich mir auch. Habe bisher folgenden Code:

Delphi-Quellcode:
implementation

function encryptData(KeyStr, DecryptedStr, EncryptedStr: PChar) : Integer; external 'EncDec.dll';
und diesen in einer Prozedur:

Delphi-Quellcode:
var resultlength: integer;
    keyStr, decryptedStr, encryptedStr: PChar;//string;//char(25);
begin
      GetMem(keyStr, length(edit1.Text) + 1);
      StrCopy(keyStr, PChar(edit1.Text));
      GetMem(decryptedStr, length(edit2.Text) + 1);
      StrCopy(decryptedStr, PChar(edit2.Text));
      GetMem(encryptedStr, 256);

      resultlength := encryptData(keyStr, decryptedStr, encryptedStr);

      FreeMem(keyStr);
      FreeMem(decryptedStr);
      FreeMem(encryptedStr);
Ich bekomme damit jedoch immer eine Speicherveltzung.

Danke
Mike

mkinzler 24. Mär 2008 17:40

Re: C dll Aufruf in Delphi
 
Wo genau?

MikeS 24. Mär 2008 17:42

Re: C dll Aufruf in Delphi
 
Hallo mkinzler,
der Fehler tritt immer beim Aufruf der Dll auf. Wenn ich diese Zeile auskommentiere dann gibt es keinen Fehler.
Mike

mkinzler 24. Mär 2008 17:46

Re: C dll Aufruf in Delphi
 
Versuch mal:
Delphi-Quellcode:
var ... encryptedStr: string;
...
      resultlength := encryptData(PChar(Edit1.Text), PChar( Edit2.Text), PChar(encryptedStr));

MikeS 24. Mär 2008 17:53

Re: C dll Aufruf in Delphi
 
Hallo,

das hat leider auch nix gebracht. Vielleicht ist es interessant, der dritte Parameter wird in der dll gesetzt.

Mike

toms 24. Mär 2008 17:57

Re: C dll Aufruf in Delphi
 
Zitat:

Zitat von MikeS
Hallo,

das hat leider auch nix gebracht. Vielleicht ist es interessant, der dritte Parameter wird in der dll gesetzt.

Mike

Hast du die Calling Convention beachtet?

mkinzler 24. Mär 2008 17:57

Re: C dll Aufruf in Delphi
 
Ja es ist ein Rückgabewert.

MikeS 24. Mär 2008 18:01

Re: C dll Aufruf in Delphi
 
@toms: was meinst du damit??

@mkinzler: was ändert sich dadurch?

Mike

mkinzler 24. Mär 2008 18:04

Re: C dll Aufruf in Delphi
 
Ich wollte nur sagen, das mir bewusst ist, das es hier um ein Rückgabewert handelt.
Die Aufrufkonvention (cdecl, stdcall, ...) legt fest, wie Parameter übergeben werden.

MikeS 24. Mär 2008 18:55

Re: C dll Aufruf in Delphi
 
Hallo,

hat vielleicht noch jemand eine Idee wie ich die Zugriffsverletzung wegbekomme? Wie kann ich denn der Variablen die den Wert durch die dll bekommen soll mit einem leeren Speicherbereich vorbelegen??

Danke
Mike

mkinzler 24. Mär 2008 18:59

Re: C dll Aufruf in Delphi
 
Delphi-Quellcode:
setLength(encryptedStr, 255);
Welche Aufrufskonvension hast du nun verwendet?

MikeS 24. Mär 2008 19:26

Re: C dll Aufruf in Delphi
 
Danke,

aktuell sieht mein Code so aus:

Delphi-Quellcode:
implementation

function encryptData(KeyStr, DecryptedStr, EncryptedStr: PChar) : Integer; external 'EncDec.dll';

{$R *.dfm}

procedure TForm1.encrypt1Click(Sender: TObject);
var resultlength: integer;
    sresult: string;
begin
      setlength(sresult, 255);
      resultlength := encryptData(PChar(edit1.Text), PChar(edit2.Text), PChar(sresult));
end;
und es gibt leider immer noch eine Zugriffsverletzung. Hat noch jemand eine Idee??

Danke
Mike

mkinzler 24. Mär 2008 19:33

Re: C dll Aufruf in Delphi
 
Schon mit cdecl oder stdcall versucht?

MikeS 24. Mär 2008 19:42

Re: C dll Aufruf in Delphi
 
Vielen Dank.
Mit "stdcall" funktioniert es einwandfrei.

Danke
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz