Einzelnen Beitrag anzeigen

Moombas
(Gast)

n/a Beiträge
 
#17

AW: Netzwerkordnerzugriff

  Alt 30. Sep 2019, 11:01
Bei der Umstellung auf Lazarus habe ich hier nun ein Problem, ich rufe den logon in Lazarus wie folgt auf:

Delphi-Quellcode:
  
  //IPC wird vorher definiert, entspricht der IP-Adresse des anderen PC's
  Path := widestring('\\' + IPC + '\c$');
  err := Logon('', Path, 'username', 'password', true);
  if (err <> 0) then
  begin
    ShowMessage(IntToStr(err) + ' - ' + SysErrorMessage(err));
  end;
Erhalte aber immer einen Fehler:

Delphi-Quellcode:
//Netzlaufwerk verbinden
function TTools.Logon(Drive: String; Path: WideString; User, Password:String; TemporaryOnly : boolean):Cardinal;
var
  NetRes : TNetResource;
  tempres : Cardinal;
  dwFlags : Cardinal;
begin
  if islocalpath(String(Path)) then
  begin
    tempres := NO_ERROR; //No need to logon
  end else
  begin
    path := ExcludeTrailingPathDelimiter(ExpandUNCFileName(Trim(path)));

    // Windows-Share login
    NetRes.dwScope := RESOURCE_GLOBALNET;
    NetRes.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;//RESOURCEDISPLAYTYPE_GENERIC;
    NetRes.dwUsage := RESOURCEUSAGE_CONNECTABLE;
    NetRes.lpComment := '';

    // Nur diese Angaben sind notwendig..
    NetRes.dwType := RESOURCETYPE_DISK; // RESOURCETYPE_ANY;
    NetRes.lpLocalName := PChar(Drive);
    NetRes.lpRemoteName := PChar(path);
    NetRes.lpProvider := '';

    if TemporaryOnly then
    begin
      dwFlags := CONNECT_TEMPORARY; // 0
    end else
    begin
      dwFlags := CONNECT_UPDATE_PROFILE;
    end;

    // CONNECT_UPDATE_RECENT ?
    if User = 'then
    begin
      tempres := WNetAddConnection2(NetRes, nil, nil, dwFlags);
    end else
    begin
      tempres := WNetAddConnection2(NetRes, PChar(Password), PChar(User), dwFlags); //FEHLER, Passwort und Benutzernamen passen
    end;
  end;
  result := tempres;
end;
Die Fehlermeldung ist (aus meiner Sicht) wenig aussagend: Projekt Workstation hat Exception-Klasse >>External: SIGSEGV<< ausgelöst.

Evtl. habe ich die Ursache gefunden, jedoch noch keine Lösung.

path := ExcludeTrailingPathDelimiter(ExpandUNCFileName(Trim(path))); Sorgt dafür das "path" leer ist, ab "ExpandUNCFileName" das sollte wohl eher nicht so sein.

Geändert von Moombas (30. Sep 2019 um 11:43 Uhr)
  Mit Zitat antworten Zitat