![]() |
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... |
Re: C - Funktionsaufruf nach Delphi konvertieren
Tja, ohne nähere Informationen über die Funktion und die Datenstruktur, wird das hier nichts geben.
|
Re: C - Funktionsaufruf nach Delphi konvertieren
Die Datenstruktur sieht folgendermassen aus
Delphi-Quellcode:
in c ist die Struktur genau gleich definiert.
type datenstruktur = record
Vorname : array of char [0..35] .... end; 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? |
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:
Und kannst so darauf zugreifen:
var
ds: datenstruktur;
Delphi-Quellcode:
Records bennent man in Delphi üblicherweise mit einem großem "T":
ds.Vorname := 'Gerome';
Delphi-Quellcode:
type
TDatenstruktur = record Vorname: ....; end; |
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: |
Re: C - Funktionsaufruf nach Delphi konvertieren
Also einen Pointer auf die Struktur bekommst du so:
Delphi-Quellcode:
Und anwenden:
type
TDaten = record ...: ...; ...: ...; end; PDaten = ^TDaten;
Delphi-Quellcode:
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.
var
Daten: PDaten; begin // Speicher anfordern New(Daten); ...; ...; // Speicher wieder freigeben Dispose(Daten); |
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;
|
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; |
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. |
Re: C - Funktionsaufruf nach Delphi konvertieren
Die Deklaration der Funktion müsste lauten:
Delphi-Quellcode:
Oder als Pointer:
function GetDaten (Nr: PChar; Daten: PDaten):byte stdcall;
Delphi-Quellcode:
Und dann in der Funktion:
function GetDaten (Nr: PChar; Daten: Pointer):byte stdcall;
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 16:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz