Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C - Funktionsaufruf nach Delphi konvertieren (https://www.delphipraxis.net/12757-c-funktionsaufruf-nach-delphi-konvertieren.html)

CF_Freak21 3. Dez 2003 17:41


C - Funktionsaufruf nach Delphi konvertieren
 
Hi Leute, ich brauch unbedingt eure Hilfe...
Ich muss unbedingt diesen Funktionsaufruf von C nach Delphi konvertieren...

short Getdaten ( char NR[5], datenstruktur* daten )

Ich hasse dieses gottverdammte C!
die funk. steht nat. in ner dll....
Wär ja auch zu schön wenn man was lesen könnte was die Funk. eigentlich macht...

Bitte, falls jemand ansatzweise nen Plan von C hat helft mir...

Luckie 3. Dez 2003 18:24

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Tja, ohne nähere Informationen über die Funktion und die Datenstruktur, wird das hier nichts geben.

CF_Freak21 4. Dez 2003 07:28

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Die Datenstruktur sieht folgendermassen aus

Delphi-Quellcode:
type datenstruktur = record
  Vorname : array of char [0..35]
  ....
end;
in c ist die Struktur genau gleich definiert.
sind nat. noch mehr felder aber ich darf die Struktur nicht rausgeben.
Haben aber alle den gleichen Datentyp array of char.
Es handelt sich hierbei konkret um eine Implementierung des ELSTER-Programmes der Bundesregierung.
(ELSTER = ElektronischeLohnsteuer oder so :lol: )
Mir ginge es eigentlich nur darum wie ich das hinkriege das er mir diese Strukt. in eine Delphi-Record hineinschreibt...
Ausserdem würd mich mal interessieren was dieser Stern in C heisst....
Hat doch was mit Pointern zu tun oder?

Luckie 4. Dez 2003 07:38

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Ich sehe dein Problem nicht. Die Struktur hast du doch jetzt schon übersetzt. Jetzt machst du dir eine Variable vom Typ des Records:
Delphi-Quellcode:
var
  ds: datenstruktur;
Und kannst so darauf zugreifen:
Delphi-Quellcode:
  ds.Vorname := 'Gerome';
Records bennent man in Delphi üblicherweise mit einem großem "T":
Delphi-Quellcode:
type
  TDatenstruktur = record
    Vorname: ....;
  end;

CF_Freak21 4. Dez 2003 07:46

Re: C - Funktionsaufruf nach Delphi konvertieren
 
ARGL...
Ich kann mich wohl irgendwie leider nicht deutlich genug ausdrücken...
Veruchen wirs nochmal:
Die Funktion aus der DLL erwartet irgendwie einen Pointer auf diese Struktur.
Ich habe aber keine Ahnung von Pointern.
Ich muss das irgendwie rüberkriegen, damit die C-Funktion da was reinschreiben kann.
Ansonsten kenn ich mich mit Records schon aus. (in Delphi)
Was ich nicht weiss ist
a) was diese c-Funktion eigentlich zurückgibt
b) wie ich sie in Delphi-Syntax schreibe
c) was ich schreiben muss damit ich sie erfolgreich aufrufe.

Ich werd nochmal blöde mit dem Scheissding... :wall:

Luckie 4. Dez 2003 07:51

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Also einen Pointer auf die Struktur bekommst du so:
Delphi-Quellcode:
type
  TDaten = record
    ...: ...;
    ...: ...;
  end;
PDaten = ^TDaten;
Und anwenden:
Delphi-Quellcode:
var
  Daten: PDaten;
begin
  // Speicher anfordern
  New(Daten);
  ...;
  ...;
  // Speicher wieder freigeben
  Dispose(Daten);
Aber so lange du keine Dokumentation oder eine Header-Datei zu der DLL hast, ist das alles nur Rungerate und endet in try and error.

CF_Freak21 4. Dez 2003 08:03

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Sorry, das versteh ich jetz nicht ganz :wiejetzt:
ich hab doch oben die def. der function in c angegeben...
Das mit dem Pointer hat mir aber schon geholfen, danke dafür.
Des Pudels kern ist aber das ich nicht weiss was diese Funktion in C erwartet...
Dieser Stern verwirrt mich...
Ich möchte nur gerne wissen wie die Struktur dieser Funktion in Delphi lauten muss, damit das hinhaut.
Das mist STdcall etc. wüsste ich auch schon, das geht bereits alles.
Es geht eigentlich nur darum folgendes in Delphi umzusetzen:


short Getdaten ( char NR[5], datenstruktur* daten )

Delphi-Quellcode:
function GetDaten (Nr: PChar; ?????????):byte stdcall;

Luckie 4. Dez 2003 08:07

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Das was du an Source gepostet hast, ist Delphi Syntax!

Ja den Zeiger hast du doch jetzt. Übergib ihn doch einfach.

Delphi-Quellcode:
type
  TDaten = record
    ...: ...;
    ...: ...;
  end;
PDaten = ^TDaten;

var
  Daten: PDaten;
  fnResult: Byte;
begin
  // Speicher anfordern
  New(Daten);
  try
    fnResult := foo('bar', Daten);
  finally
    // Speicher wieder freigeben
    Dispose(Daten);
  end;

CF_Freak21 4. Dez 2003 08:09

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Das ist der Source in Delphi, den ich schon weiss...
Das andere haut nicht hin... da wo die Fragezeichen stehen.

Luckie 4. Dez 2003 08:19

Re: C - Funktionsaufruf nach Delphi konvertieren
 
Die Deklaration der Funktion müsste lauten:
Delphi-Quellcode:
function GetDaten (Nr: PChar; Daten: PDaten):byte stdcall;
Oder als Pointer:
Delphi-Quellcode:
function GetDaten (Nr: PChar; Daten: Pointer):byte stdcall;
Und dann in der Funktion:
Delphi-Quellcode:
function GetDaten (Nr: PChar; Daten: Pointer):byte stdcall;
var
  Daten: TDaten;
begin
  Daten.Vorname := PDaten(daten)^.Vorname;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.
Seite 1 von 2  1 2      

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