Hi,
Ich möchte ein Programm schreiben, welches Informationen über Laufwerke (CD/DVD/HDD etc), mit der Funktion
GetVolumeInformation ausliest.
Ich habe ein erstes Programm in Delphi
Win32 geschrieben, welches super funktionierte.
Um die Funktionalität meines Programmes zu erweitern habe ich dann das gleiche Projekt nochmal mit Delphi.Net angefangen.
Es mussten einige Variablen umgechrieben werden, etc. Eigentlich alles nicht so das Problem.
Doch merkwürdigerweise bekomme ich nur noch leere Variablen von der Funktion
GetVolumeInformation zurück.
Delphi-Quellcode:
procedure TForm4.ComboBox1Change(Sender: TObject);
var
Drive: string;
drive_buffer: StringBuilder;
drive_sn: cardinal;
drive_temp : cardinal;
Sys_flags: cardinal;
file_system: Stringbuilder;
begin
Listbox1.Items.Clear;
drive_buffer := stringbuilder.Create;
file_system := stringbuilder.Create;
Drive := combobox1.Text; //Laufwerksbuchstabe
GetVolumeinformation(Drive,drive_buffer,sizeof(drive_buffer),drive_sn,
drive_temp,sys_flags, file_system, sizeof(file_system));
//Ausgabe
Listbox1.Items.Add(Drive);
Listbox1.Items.Add('Name: ' + drive_buffer.tostring());
Listbox1.Items.Add('Serialnumber: ' + inttostr(drive_sn));
Listbox1.Items.Add('Filesystem: ' + file_system.tostring());
end;
In der
MSDN (
MSDN - GetVolumeInformation) steht ja, dass man
Pointer verwenden soll. Delphi.Net verlangt aber
StringBuilder für diese Funktion (Delphi
Win32 verlangt Pointer).
Kurz und knapp - Kompilieren geht, die Ausgabe in der Listbox bleibt leer und ich habe keinen Plan warum, weil ich mich mit .Net noch nicht so auskenne.