![]() |
Suche in Delphi funktionen wie in C
Hallo alle zusammen ich suche die funktionen fopen fread un fwrite wie in C in Delphi für eine Dll die ein Programm benutzt das in C geschrieben ist.
Ich müsste das übersetzten aus dem C Übersetzten
Code:
FILE *f = fopen(cszName,cszMode);
... return (SteamHandle_t)f; |
Re: Suche in Delphi funktionen wie in C
Du hast drei Möglichkeiten, um auf Dateien zuzugreifen.
a) die Delphi eigenen Funktionen, die mit Dateivariablen arbeiten (siehe AssignFile, Read, Write, usw. in der Delphi-Hilfe) b) die Delphi eigenen Funktionen, die mit Dateinamen arbeiten (DeleteFile, FileCreate, usw.) c) direkt mit den Funktionen der Windows-API (CopyFile, MoveFile, usw. aus dem MSDN) Musst Du Dir halt mal anschauen, was Dir am Besten liegt... |
Re: Suche in Delphi funktionen wie in C
Da gäbe es auch noch FileOpen/FileRead/FileWrite//FileSeek/FileClose.
|
Re: Suche in Delphi funktionen wie in C
Zitat:
|
Re: Suche in Delphi funktionen wie in C
Ok werde es ausprobieren danke ! .
Ausserdem wenn ich gewusst hätte wie es in Delphi heist hätte ich es in der Hilfe gesucht. |
Re: Suche in Delphi funktionen wie in C
Ihr habt die Streams vergessen. ;)
|
Re: Suche in Delphi funktionen wie in C
Du übergibst da den Datentyp "FILE". Wenn das ein Windows-Dateihandle ist, sollte es nicht so schwer sein, das zu übersetzen(
![]() Wenn das aber ein C-eigener Datentyp ist, wirds schwerer. |
Re: Suche in Delphi funktionen wie in C
Hier ist die Ganze Function mal
Code:
wobei SteamHandle_t vom type Integer ist.
STEAM_API SteamHandle_t STEAM_CALL SteamOpenFile( const char *cszName, const char *cszMode, TSteamError *pError )
{ FILE *f = fopen(cszName,cszMode); ErrnoToSteam(pError,(NULL==f)?errno:0); dprintf("SteamOpenFile(%s,%s)=%p\n",cszName,cszMode,f); return (SteamHandle_t)f; } Was mir nun noch kopfschmerzen bereitet ist cszMode (PChar) zur funktion FileOpen --> LongWord :wall: Wie mache ich das nun ??? |
Re: Suche in Delphi funktionen wie in C
Zitat:
ein char* ist einfach nur ein Zeiger auf ein Byte-Array in C (wird zumidenst einfach so verwendet). Damit musst du etwas unschön casten. Wichtig ist halt, was du eigentlich hier übergibst, in der Regel wird es nur ein Zeiger auf ein LongWord (Array[0..3] of Byte) sein, dass hier einfach nur anders interpretiert wird. Ob du die 4 Byte nur einzeln indexieren kannst oder sie als einen Wert nimmst ist dem Speicher egal, hier ist nur die Startposition wichtig (Beim char* und ^LongWord die gleiche) und wie viele Bytes das Datum hat (auch in beiden Fällen 4 Byte), was nun mit diesem Datum passiert ist dir ab der Stelle egal. Gruß Der Unwissende |
Re: Suche in Delphi funktionen wie in C
Was meinst du mit dem Datum mir geht es um Mod wie die Datei geöffnet wird. in C wird da r, w, a, r+ usw. und in Delphi sind das Constanten mit zahlen.
|
Re: Suche in Delphi funktionen wie in C
Zitat:
"r" => fmOpenRead "w" => fmCreate "rw" => fmOpenReadWrite Der Rest hier: Zitat:
|
Re: Suche in Delphi funktionen wie in C
fopen, fread und fwrite sind Funktionen der C Runtime Library und keine API Funktionen. Man kann sie deshalb nicht direkt in Delphi verwenden.
Man koennte aber diese Funktionen aus der MSVCRT.DLL (Microsoft Visual C Runtime) aufrufen. |
Re: Suche in Delphi funktionen wie in C
Habe mal Nachgedacht und will es so versuchen
Delphi-Quellcode:
Da kann ich nun das so setzten
TMod = record
case Integer of 0: (CMod: PChar); 1: (DMod: PLongWord); end;
Delphi-Quellcode:
Was meint ihr Geht das so ?
var
Mod: TMod; Handle: Integer; begin Mod.CMod := cszMode; Handle := FileOpen(.., Mod.DMod); ..... end; |
Re: Suche in Delphi funktionen wie in C
Warum benutzt du nicht einfach die von Delphi definierten Konstanten:
Delphi-Quellcode:
fmOpenRead = $0000;
fmOpenWrite = $0001; fmOpenReadWrite = $0002; fmShareCompat = $0000; fmShareExclusive = $0010; fmShareDenyWrite = $0020; fmShareDenyRead = $0030; fmShareDenyNone = $0040; |
Re: Suche in Delphi funktionen wie in C
Zitat:
|
Re: Suche in Delphi funktionen wie in C
An sich keine Schlechte Idee aber da das hauptprogramm nicht von mir ist und ich nur Pchar als Parameter bekomme kann ich die Konstanten nicht nehmen.
|
Re: Suche in Delphi funktionen wie in C
Wie wäre es, wenn du die PChars mittels If-Anweisung in die passenden Konstanten umwandelst?
|
Re: Suche in Delphi funktionen wie in C
Hast recht habe wohl anscheinendt keine Wahl. Danke Erstmal für eure Hilfe.
|
Re: Suche in Delphi funktionen wie in C
Ich mach das jetzt so wie es mir
Zitat:
da kommt nun eine Variable wo ich mir nicht ganz sicher bin
Code:
ich tippe mal nur Int64 aber ich frage mal euch ob das stimmt ?
typedef unsigned __int64 size_t;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 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