Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suche in Delphi funktionen wie in C (https://www.delphipraxis.net/83423-suche-delphi-funktionen-wie-c.html)

nitschchedu 2. Jan 2007 15:55


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;

RavenIV 2. Jan 2007 16:26

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

jbg 2. Jan 2007 16:28

Re: Suche in Delphi funktionen wie in C
 
Da gäbe es auch noch FileOpen/FileRead/FileWrite//FileSeek/FileClose.

RavenIV 2. Jan 2007 16:30

Re: Suche in Delphi funktionen wie in C
 
Zitat:

Zitat von jbg
Da gäbe es auch noch FileOpen/FileRead/FileWrite//FileSeek/FileClose.

Mit Einsatz der Delphi-Hilfe würde er diese Funktionen auch finden...

nitschchedu 2. Jan 2007 16:39

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.

Luckie 2. Jan 2007 16:56

Re: Suche in Delphi funktionen wie in C
 
Ihr habt die Streams vergessen. ;)

DGL-luke 2. Jan 2007 17:02

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(MSDN-Library durchsuchenCreateFile).
Wenn das aber ein C-eigener Datentyp ist, wirds schwerer.

nitschchedu 2. Jan 2007 17:52

Re: Suche in Delphi funktionen wie in C
 
Hier ist die Ganze Function mal
Code:
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;
}
wobei SteamHandle_t vom type Integer ist.

Was mir nun noch kopfschmerzen bereitet ist cszMode (PChar) zur funktion FileOpen --> LongWord :wall:
Wie mache ich das nun ???

Der_Unwissende 2. Jan 2007 17:58

Re: Suche in Delphi funktionen wie in C
 
Zitat:

Zitat von nitschchedu
Was mir nun noch kopfschmerzen bereitet ist cszMode (PChar) zur funktion FileOpen --> LongWord :wall:
Wie mache ich das nun ???

Hi,
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

nitschchedu 2. Jan 2007 18:11

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.

jbg 2. Jan 2007 18:14

Re: Suche in Delphi funktionen wie in C
 
Zitat:

Zitat von Der_Unwissende
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.

Da wird "r", "w", "rw" und ein paar andere Werte übergeben und kein verklausoliertes LongWord.
"r" => fmOpenRead
"w" => fmCreate
"rw" => fmOpenReadWrite


Der Rest hier:
Zitat:

  • 'r' Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.
  • 'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.
  • 'w' Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.
  • 'w+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
  • 'a' Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
  • 'a+' Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.


Robert Marquardt 2. Jan 2007 18:20

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.

nitschchedu 3. Jan 2007 15:52

Re: Suche in Delphi funktionen wie in C
 
Habe mal Nachgedacht und will es so versuchen

Delphi-Quellcode:
TMod = record
 case Integer of
 0: (CMod: PChar);
 1: (DMod: PLongWord);
end;
Da kann ich nun das so setzten

Delphi-Quellcode:
var
 Mod: TMod;
 Handle: Integer;
begin
 Mod.CMod := cszMode;

 Handle := FileOpen(.., Mod.DMod);
.....
end;
Was meint ihr Geht das so ?

Luckie 3. Jan 2007 15:54

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;

jbg 3. Jan 2007 16:12

Re: Suche in Delphi funktionen wie in C
 
Zitat:

Zitat von nitschchedu
Was meint ihr Geht das so ?

Habe ich doch schon geschrieben: "Da wird "r", "w", "rw" und ein paar andere Werte übergeben und kein verklausoliertes LongWord.". Mit dem Union der dir den Typecast abnimmt bekommst du nur Datenschrott mit dem FileOpen nichts anfangen kann.

nitschchedu 3. Jan 2007 19:01

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.

jbg 3. Jan 2007 19:09

Re: Suche in Delphi funktionen wie in C
 
Wie wäre es, wenn du die PChars mittels If-Anweisung in die passenden Konstanten umwandelst?

nitschchedu 3. Jan 2007 20:28

Re: Suche in Delphi funktionen wie in C
 
Hast recht habe wohl anscheinendt keine Wahl. Danke Erstmal für eure Hilfe.

nitschchedu 11. Jan 2007 17:22

Re: Suche in Delphi funktionen wie in C
 
Ich mach das jetzt so wie es mir

Zitat:

Zitat von Robert Marquardt
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.

empfohlen hat.

da kommt nun eine Variable wo ich mir nicht ganz sicher bin

Code:
typedef unsigned __int64    size_t;
ich tippe mal nur Int64 aber ich frage mal euch ob das stimmt ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 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