AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TMemoryStream zu CreateFile ummodeln.. -.-

TMemoryStream zu CreateFile ummodeln.. -.-

Ein Thema von turboPASCAL · begonnen am 7. Sep 2009 · letzter Beitrag vom 7. Sep 2009
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 16:54
Hi,

ich mal wieder...

Ich möchte mir eine Art MemoryStream oder besser gesagt einen Dateiöffner basteln.
So klappts anscheind nicht, da die Daten nur Müll enthalten:

Delphi-Quellcode:
var
  mem: pointer = nil;

function(FName: PChar): bool;
var
  hFile: THandle;
  Size: Cardinal;
  dummy: Cardinal;
begin
  Result := False;

  hFile := CreateFileA(FName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  try
  if hFile <> 0 then
  begin
    Size := GetFileSize(hFile, nil);
    GetMem(mem, Size);
    ReadFile(hFile, mem, size, dummy, nil);
  end;
  finally
    CloseHandle(hFile);
  end;

  result := (hFile <> 0) and (mem <> nil);
end;

// function MemDone ...
// FreeMem(mem);
// mem := nil
Nu ist die Frage, hab ich es richtig so ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 17:00
Versuchs mal mit mem^ beim ReadFile.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.372 Beiträge
 
Delphi 12 Athens
 
#3

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 17:04
oder TMemoryStream nehmen
.LoadFromFile die Datei laden
und .Memory zeigt auf den Speicher (würde praktisch deinem mem entsprechen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 17:55
Zitat von Dax:
Versuchs mal mit mem^ beim ReadFile.
Nö, tut's leider auch nicht.

Zitat von himitsu:
oder TMemoryStream nehmen
.LoadFromFile die Datei laden
und .Memory zeigt auf den Speicher (würde praktisch deinem mem entsprechen)
Ja, das klappt. Auch mit nonVCL ohne die Classes zu verwenden.

Aber ich würde es gern mal mit CreateFile & Co versuchen.

man kanns sich ja auch schwehr machen (wollen) >.<
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 17:58
Gibt deine function denn true zurück?

Step mal durch. Guck mal ob die Größe (Size) stimmt. Und dann muss es wie schon gesagt mem^ heißen bei ReadFile..

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.372 Beiträge
 
Delphi 12 Athens
 
#6

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 18:03
wenn du es wirklich schwer haben willst, dann schau in meinen FileSplitter, da hab ich das ins Extreme getrieben (ja, ich bin verspielt)

aber eigentlich sollte es so gehn
ReadFile(hFile, mem^, size, dummy, nil);

PS:
Code:
if hFile <> [b]INVALID_HANDLE_VALUE[/b] then
und das ist -1 bzw $FFFFFFFF
also bist'e dir sicher, daß deine Datei wirklich geöffnet wurde?

PSS:
Zitat:
Nö, tut's leider auch nicht.
du solltest aber wissen, daß wir so nicht wissen was es nicht tut
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 18:05
Hi,

Also hab mal was gebaut.. Das hier geht:

Delphi-Quellcode:
function OpenFile(FName: String): Pointer;
var h: hFile;
    len: Cardinal;
begin
  Result := nil;

  h := CreateFile(PChar(FName),GENERIC_READ,FILE_SHARE_READ,
                  nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

  if h <> INVALID_HANDLE_VALUE then
  begin
    len := GetFileSize(h,nil);
    GetMem(Result,len);
    ReadFile(h,Result^,len,len,nil);
    CloseHandle(h);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Zu Testzwecken wird auf guten Stil verzichtet :)
  Memo1.Text := PChar(OpenFile('C:\bsp.ini'));
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.372 Beiträge
 
Delphi 12 Athens
 
#8

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 18:09
Zitat:
PChar(OpenFile('C:\bsp.ini'))
ich hoffe mal, daß zufällig hinter dem Speicher eine #0 vorkommt, denn sonst ließt er, bis es kracht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 18:29
Ich ...

Delphi-Quellcode:
var
  bing: pointer;

function bla(p: pointer)...

begin
  if bla(@bing) then...
end.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: TMemoryStream zu CreateFile ummodeln.. -.-

  Alt 7. Sep 2009, 18:34
Zitat von himitsu:
Zitat:
PChar(OpenFile('C:\bsp.ini'))
ich hoffe mal, daß zufällig hinter dem Speicher eine #0 vorkommt, denn sonst ließt er, bis es kracht
Ich würds im Ernstfall nicht so machen

Das war nur schnell zum Testen obs funktioniert

@turboPASCAL: Das sind die tollsten Fehler
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 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