Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Netzwerkordnerzugriff (https://www.delphipraxis.net/196896-netzwerkordnerzugriff.html)

Moombas 1. Okt 2019 07:14

AW: Netzwerkordnerzugriff
 
Das wäre dann aber nur bei Lazarus so, bei Delphi lief das einwandfrei durch.
Wenn ich mir die Funktion jedoch anschaue, ist es wohl eher so, das es bei jedem Fehler, der nicht "ERROR_NOT_CONNECTED" entspricht ein leeres Ergebnis zurück gibt.
Delphi-Quellcode:
function ExpandUNCFileName (const filename:unicodestring) : unicodestring;
...
    if rc = NO_ERROR then
      Result := PRemoteNameInfoW(buf)^.lpUniversalName
    else if rc = ERROR_NOT_CONNECTED then
      Result := filename
    else
      Result := '';          
...
Kann ich mir die Fehlermeldung, die bei "rc" rauskommt irgendwie ausgeben lassen ohne die "Systemfunktion" zu ändern?

..ohne diese Abfrage funktioniert es im Zweifelsfall auch, dennoch würde ich mich interessieren wie man das zum laufen bekommt, da ich hierbei ggf. wieder Unterschiede zwischen Delphi und Lazarus lernen könnte.

Incocnito 1. Okt 2019 10:36

AW: Netzwerkordnerzugriff
 
Hi,

vielleicht denke ich auch nur falsch, aber meiner Meinung nach kann
ExpandUNCFileName
nicht richtig arbeiten, solange die Verbindung zur IP selbst nicht
(mit WNetAddConnection2) bereits hergestellt ist.
Er kann den Rechner ja nicht fragen, weil er ja keine Rechte hat.

Ich hoffe, ihr wisst, worauf ich hinaus will!
"Henne-Ei-Problem"!

LG Incocnito

Moombas 1. Okt 2019 14:01

AW: Netzwerkordnerzugriff
 
Ich hab es erst mal auskommentiert, da es der letzte und einzige Part ist, den ich nun in Lazarus nicht zum laufen bekomme bzw. ohne den ich zurecht kommen würde.
Wenn jemand dafür dennoch eine Lösung weiß wäre ich dankbar.

Dalai 1. Okt 2019 14:28

AW: Netzwerkordnerzugriff
 
Ist zwar nicht direkt eine Lösung, aber zumindest ein ganz pragmatischer Workaround gegen einen leere Rückgabe:
Delphi-Quellcode:
function _ExpandUNCFileName(const AFileName: UnicodeString): UnicodeString;
begin
    Result:= ExpandUNCFileName(AFileName);
    if Result = '' then
        Result:= AFileName;
end;
Weiß nicht, was die Lazarus/FreePascal-Entwickler dazu bewogen hat, die Funktion einen Leerstring zurückgeben zu lassen. Ist das so dokumentiert? Dann ist es soweit in Ordnung. Wenn nicht => Bugreport, damit es gefixt werden kann.

Grüße
Dalai

Moombas 2. Okt 2019 09:04

AW: Netzwerkordnerzugriff
 
Als "Dokumentation" bzw. Hilfe konnte ich nur das finden:
Zitat:

ExpandUNCFileName
Expand a relative filename to an absolute UNC filename.

Declaration
Source position: finah.inc line 31

function ExpandUNCFileName(

const FileName: UnicodeString

):UnicodeString;

function ExpandUNCFileName(

const FileName: RawByteString

):RawByteString;

Description
ExpandUNCFileName runs ExpandFileName on FileName and then attempts to replace the drive letter by the name of a shared disk.

Errors
None.

Moombas 8. Okt 2019 09:33

AW: Netzwerkordnerzugriff
 
Scheinbar ist das so gewollt:
Zitat:

The function does report an error:
Returning an empty string is returning an error. You can check on that.
I will add this to the documentation, however.
Auch wenn ich einen Leerstring nicht als error ansehen würde, da ich dann immer noch nicht weiß, was für ein Fehler aufgetreten ist aber naja die Doku soll angepasst werden.

Luckie 8. Okt 2019 13:41

AW: Netzwerkordnerzugriff
 
GetLastError?

Moombas 11. Okt 2019 13:29

AW: Netzwerkordnerzugriff
 
Hab ich auch schon ausprobiert, bekomme ich leider nichts zurück ('').

Dalai 11. Okt 2019 14:08

AW: Netzwerkordnerzugriff
 
Nichts kann bei GetLastError nicht sein, denn diese Funktion liefert einen Zahlenwert (DWORD). Trotzdem kann es passieren, dass GetLastError nicht hilft, denn wenn innerhalb von ExpandUNCFileName nach dem Aufruf der fehlerauslösenden API-Funktion noch andere API-Funktionen gerufen werden, wird der eigentliche Fehler u.U. verschleiert ...

Grüße
Dalai

Moombas 15. Okt 2019 08:02

AW: Netzwerkordnerzugriff
 
Das kann sein, das ich das GetLastError ggf. zu spät aufgerufen habe beim testen und dann überschrieben war. Will ich jetzt nicht ausschließen.

Da es aber auch ohne diesen Part bzw. mit dem Workaround von Dalai geht, ist es erst mal egal. Finde es nur etwas "seltsam" das das unterschiedlich behandelt wird...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz