Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

DeleteVolumeMountPoint funktioniert nicht

  Alt 31. Jul 2006, 14:27
Die Definition stimmt:
Delphi-Quellcode:
Function SetVolumeMountPointW(VolumeMountPoint, VolumeName: PWideChar): LongBool;
  External 'kernel32.dllName 'SetVolumeMountPointW';
Function DeleteVolumeMountPointW(VolumeMountPoint: PWideChar): LongBool;
  External 'kernel32.dllName 'DeleteVolumeMountPointW';
Aufrufen tu ich es so:
Delphi-Quellcode:
If DeleteVolumeMountPointW(PWideChar(GetText(D.ComboBox4))) Then
  Button1.Click Else ShowLastError;
Was in meinem Testfall dem entspricht:
DeleteVolumeMountPoint('Y:\'#0); Aber es kommt immer nur:
Zitat:
---------------------------
Fehler
---------------------------
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.

---------------------------
OK
---------------------------
Hab schon alles Mögliche versucht,
Zitat:
'Y:\'
'Y:'
'\\.\Y:\'
'\\.\Y:'
obwohl die Erste Angabe schon stimmen sollte.
Zitat:
[in] Pointer to a string that indicates the volume mount point to be unmounted. This may be a root directory (X:\, in which case the DOS drive letter assignment is removed) or a directory on a volume (X:\mnt\). A trailing backslash is required.
Im PSDK zwar sowas
Zitat:
To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0500 or later. For more information, see Using the SDK Headers.
aber wie soll ich das in Delphi machen, wenn überhaupt nötig?


System: WinXP SP2



Die beiden Funktionen, wie sie sich hinter den Buttons "Add" und "Delete" bei den "Locical Drives" in http://www.delphipraxis.net/internal...=587272#587272 (siehe Anhang) verstecken:
Delphi-Quellcode:
Procedure TForm1.Button4Click(Sender: TObject);
  Var Di: Integer;
    D: TVolumeMountPoint_AddDialog;

  Begin
    Di := TreeView2.Selected.Index;
    D := TVolumeMountPoint_AddDialog.Create(Self);
    Try
      SetText(D.Label2, LogicalDrives[Di].VolumeName);
      If D.ShowModal = mrOK Then
        If SetVolumeMountPointW(PWideChar(GetText(D.Edit4)),
          PWideChar(LogicalDrives[Di].VolumeName + '\')) Then
          Button1.Click Else ShowLastError;
    Finally
      D.Free;
    End;
  End;

Procedure TForm1.Button5Click(Sender: TObject);
  Var Di, i: Integer;
    D: TVolumeMountPoint_DeleteDialog;
    S: WideString;

  Begin
    Di := TreeView2.Selected.Index;
    If LogicalDrives[Di].VolumePathNames = 'Then Exit;
    D := TVolumeMountPoint_DeleteDialog.Create(Self);
    Try
      SetText(D.Label2, LogicalDrives[Di].VolumeName);
      S := LogicalDrives[Di].VolumePathNames;
      While S <> 'do Begin
        i := Pos(#9, S);
        If i = 0 Then i := Length(S) + 1;
        D.ComboBox4.Items.Add(Copy(S, 1, i - 1));
        Delete(S, 1, i);
      End;
      D.ComboBox4.ItemIndex := 0;
      If D.ShowModal = mrOK Then
        If DeleteVolumeMountPointW(PWideChar(GetText(D.ComboBox4))) Then
          Button1.Click Else ShowLastError;
    Finally
      D.Free;
    End;
  End;
Hab's natürlich auch schon in einogen Tests mit direkten Aufrufen, mit Sringconstanten, Stringvariablen und auch mit den AnsiVersionen versucht
$2B or not $2B
  Mit Zitat antworten Zitat