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.