AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array[0..0] Speicherreservieren

Ein Thema von Alter Mann · begonnen am 7. Sep 2010 · letzter Beitrag vom 7. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
948 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 10:44
Hallo,

die Idee mit GetMem ist nicht schlecht, nur, ich kann den Record nicht ändern!
"Fehlermeldung: Inkompatible Typen"
  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
 
#2

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 10:46
Also wenn du das Rekord nicht ändern kannst und ich nicht gerade aufm Schlauch stehe, dann glaube ich nicht, dass du da irgendwas machen kannst...

PS: Ein GetMem mit einem Nicht-Pointer-Typ funktioniert natürlich nicht (Inkompatible Typen)
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
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
948 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 10:55
Zitat:
ich nicht gerade aufm Schlauch stehe
Das wollen wir doch mal nicht hoffen

Hintergrund ist IOCTL_DISK_GET_DRIVE_LAYOUT vielleicht fällt da der Groschen?

Das, das ein Thema für sich ist, ist mir klar aber es muss doch eine Alternative zu diesem
C-Code geben:
Code:
DWORD junk;
BOOL bResult;

DWORD nPartitions = 16;
DWORD nBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) + nPartitions * sizeof(PARTITION_INFORMATION);

DRIVE_LAYOUT_INFORMATION* pDLI =
(DRIVE_LAYOUT_INFORMATION*)malloc(sizeof(DRIVE_LAYOUT_INFORMATION) + nPartitions * sizeof(PARTITION_INFORMATION)); // <- wie in Delphi?

bResult = DeviceIoControl(hDevice,
IOCTL_DISK_GET_DRIVE_LAYOUT,
NULL,
0,
pDLI,
nBufferSize,
&junk,
NULL);
Wie geschrieben es geht hier nicht um IOCTL_DISK_GET_DRIVE_LAYOUT sondern um die Speicherreservierung.
  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
 
#4

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 10:58
So:

Delphi-Quellcode:
var D: ^DLI;
begin
  GetMem(D,SizeOf(DLI) + 15*SizeOf(PI));
end;
@himitsu (über mir): GetMem ist eine Procedure mit 2 Parametern. Du meinst wahrscheinlich GetMemory
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 SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 11:02
Warum kannst du den RecordTyp nicht ändern? Wer zwingt dich beim Aufruf die nicht funktionierende Variante zu verwenden? Wer hindert dich daran das Array einfach groß genug zu definieren?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.869 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 11:06
Oder halt einen dynamischen Array zu verwenden
Markus Kinzler
  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

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 11:07
Oder halt einen dynamischen Array zu verwenden
Damit wird die API nicht klarkommen, weil dynamische Arrays anders aufgebaut sind.
(Sind ja nur Pointer und hier werden ja direkt im Record mehrere hintereinanderliegende Strukturen erwartet)
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
44.326 Beiträge
 
Delphi 12 Athens
 
#8

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 11:07
Diese nichtfunktionierende Variante ist ein Versuch einer direkten Übersetzung der C-Header von Microsoft.

Dort kann man statische Arrays mit [0]-Länge deklarieren.
(leider kennt Delphi sowas nicht, so daß man sich über den Sonderfall von [0..0] das Array mit einem Feld und ohne Bereichsprüfung zu nutzen)
In den C-Vorlangen wird dann ebenfalls so gearbeitet, wie in meinem Beispiel.

Aber wie gesagt, ich mochte diese Arrays auch nicht und hab das mit selbstdeklariert, womit ich mir dan die Resourcenschutzblöcke und einen Großteil der Speicherverwaltung erspart hab.
(man darf auch mal Faul sein )

[edit]
OK, hier gibt es sogar mal ein [1]-Array im Original-Header
http://msdn.microsoft.com/en-us/library/aa364001.aspx
(es ist also eine fast 1:1-Übersetzung)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Sep 2010 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
948 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 11:13
Hallo

und danke an alle, damit geht es:
Delphi-Quellcode:
var D: ^DLI;
begin
  GetMem(D,SizeOf(DLI) + 15*SizeOf(PI));
end;
Die Thematik IOCTL_DISK_GET_DRIVE_LAYOUT kommt gesondert.

Danke bis zum 17.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
948 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Array[0..0] Speicherreservieren

  Alt 7. Sep 2010, 11:16
@himitsu

genau, nur das ich DRIVE_LAYOUT_INFORMATION_EX nicht verwenden darf; W2K lässt grüßen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:55 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 by Thomas Breitkreuz