![]() |
WebDav - Laufwerk - ChatPGT
Guten Abend,
schon länger habe ich den Gedanken im Kopf, mir ein kleines Tool zu schreiben das für mein WebDav ein Lokales Laufwerk (kein Netzwekordner) erstellt. Beschäftigt habe ich mich mit Netzwerk-/Web Programmierung bisher wenig, fast gar nicht, bis auf Links aufrufen, bissel Browserkram. Neugierig wie ich bin, fragte ich einfach mal ChatPGT wie das geht :-D. Ich habe eigentlich nicht viel erwartet. ChatPGT hat mir aber Code präsentiert, den ich für schlüssig hielt. Wohl weil ich 95% davon eh nicht verstehe. Ich kopierte den Code nach Delphi und Überraschung, er "funktionierte". Also nicht ganz. Es gab keine Errors, das Kompilieren lief problemlos durch. Nur ohne Ergebnis. Es wird kein Laufwerk erstellt, einfach nichts. Ist der Code von ChatPGT komplett strubbelig aber kompilierbar? Veräppelt ChatPGT mich und der Code bezweckt etwas ganz anderes? Wäre der Code voller Fehler, hätte es mich nicht gewundert. Das er problemlos kompiliert schon.
Delphi-Quellcode:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; const CONNECT_INTERACTIVE = $00000008; CONNECT_PROMPT = $00000010; CONNECT_REDIRECT = $00000080; CONNECT_UPDATE_PROFILE = $00000001; RESOURCETYPE_DISK = $00000001; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation function WNetAddConnection2A(lpNetResource: PNetResourceA; lpPassword: PChar; lpUserName: PChar; dwFlags: DWORD): DWORD; stdcall; external 'mpr.dll' name 'WNetAddConnection2A'; function MapWebDAV(const RemotePath, LocalDrive: string; const UserName, Password: string): Boolean; var NetResource: TNetResourceA; Drive: Char; begin Drive := LocalDrive[1]; FillChar(NetResource, SizeOf(NetResource), 0); with NetResource do begin dwType := RESOURCETYPE_DISK; lpRemoteName := PAnsiChar(RemotePath); lpLocalName := PAnsiChar(Drive + ':'); lpComment := nil; lpProvider := nil; end; Result := WNetAddConnection2A(@NetResource, PChar(Password), PChar(UserName), CONNECT_INTERACTIVE or CONNECT_PROMPT or CONNECT_UPDATE_PROFILE) = NO_ERROR; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin MapWebDAV('https://nx34493.your-storageshare.de/remote.php/dav/files/Andreas/', 'Z:', 'User', 'PW'); end; end. |
AW: WebDav - Laufwerk - ChatPGT
MapWebDAV ist doch 'ne Funktion, es wird aber nicht abgefragt, was sie zurück gibt.
Sinnvoller wäre sowas:
Delphi-Quellcode:
Dann kann man mit Result abfragen, was denn da so schief ging, siehe
function MapWebDAV(const RemotePath, LocalDrive: string;
const UserName, Password: string): DWord; ... Result := WNetAddConnection2A(@NetResource, PChar(Password), PChar(UserName), CONNECT_INTERACTIVE or CONNECT_PROMPT or CONNECT_UPDATE_PROFILE); ![]() Frag' bitte ChatPGT nochmal die gleiche Frage, wenn die Antwort dann vorliegt, bitte um eine aussagefähig Fehlerbehandlung. Eventuell bekommst Du die ja auch noch geliefert. |
AW: WebDav - Laufwerk - ChatPGT
ChatPGT kann ich heute leider nicht mehr nutzeen.
Zu viel blödes Zeug gefragt :-D. Die MapWebDav Funktion habe ich angepasst wie von Dir beschrieben (hoffe ich). Wird auch problemlos kompiliert.
Delphi-Quellcode:
Ich bekomme jetzt den "Error 1200". Das ist ja schon mal mehr.
function MapWebDAV(const RemotePath, LocalDrive: string;
const UserName, Password: string): DWord; var NetResource: TNetResourceA; Drive: Char; begin Drive := LocalDrive[1]; FillChar(NetResource, SizeOf(NetResource), 0); with NetResource do begin dwType := RESOURCETYPE_DISK; lpRemoteName := PAnsiChar(RemotePath); lpLocalName := PAnsiChar(Drive + ':'); lpComment := nil; lpProvider := nil; end; Result := WNetAddConnection2A(@NetResource, PChar(Password), PChar(UserName), CONNECT_INTERACTIVE or CONNECT_PROMPT or CONNECT_UPDATE_PROFILE); if (Result = NO_ERROR) then ShowMessage('Connection added ' + PAnsiChar(RemotePath)) else ShowMessage('WNetAddConnection2 failed with error: ' + Result.ToString); Ich tippe auf Zugangsdaten, obwohl die richtig sind. Aber vielleicht irgendwo nicht richtig übermittelt werden. |
AW: WebDav - Laufwerk - ChatPGT
Unicode und AnsiFunktionen ... Warum hört niemand darauf, wenn der Compiler Warnungen auswirft?
Sollte er zumindestens bei allen Codes hier machen, außer bei Delphi.Narium, mit einem Nicht-Unicode-Delphi von vor 2009, wo noch Char=AnsiChar. * Alles auf AnsiString und PAnsiChar umstellen * oder alles auf Unicode umstellen. (W-Funktionen, bzw. besser ohne A und W) AnsiString, PAnsiChar und WNetAddConnection2A WideString/UnicodeString, PWideChar und WNetAddConnection2W String, PChar und WNetAddConnection2 (wo der Compiler, bzw. die API-Deklaration entsprechend auf WNetAddConnection2A oder WNetAddConnection2W weiterleitet) Gut, nach 14 Jahren könnte man das ANSI langsam mal vergessen, aber es wäre auch toll, wenn es langsam mal alle richtig lernen. |
AW: WebDav - Laufwerk - ChatPGT
![]() Der Link ![]() Dort nach 1200 gesucht ergibt ERROR_BAD_DEVICE. In der Dokumentation steht dazu: Zitat:
|
AW: WebDav - Laufwerk - ChatPGT
Bei ihm kommt sogar
Delphi-Quellcode:
an, wobei ebenfalls
'Z'#0':'#0':'#0
Delphi-Quellcode:
immernoch ungültig sein würde.
'Z'#0':'#0
Sowas passiert eben, wenn man einen UnicodeString hart nach PAnsiChar castet, obwohl der Complier davor warnen dürfte. |
AW: WebDav - Laufwerk - ChatPGT
Au man, danke. Hab den Doppelpunkt da mal raus genommen.
Der Fehler bleibt. ChatPGT macht es einem wohl doch nicht so einfach :-D. Ich lese mich am Wochenende näher ein, auch in die Festplattenerstellung vor dem mappen. Danke :) |
AW: WebDav - Laufwerk - ChatPGT
Bitte beachte, vor dem Einlesen, was himitsu schreibt.
Dein Delphi ist aktuell und kann Unicode, meins nicht, von daher sollte man hinterfragen, ob WNetAddConnection2A hier richtig ist, das ist die Ansi-Variante von WNetAddConnection2. In MapWebDAV ist Drive als Char definiert, das dürfte aber nicht unbedingt mit PAnsiChar(Drive + ':'); kompatibel sein. Um die Aufrufparameter sinnvoller zu gestalten, wäre es durchaus empfehlenswert
Delphi-Quellcode:
als
LocalDrive: string;
Delphi-Quellcode:
zu definieren. Dann kann man da schonmal nicht mehr mehr als den Laufwerksbuchstaben übergeben und sich die Umkopiererei in der Funktion sparen.
LocalDrive: Char;
Insgesamt dürfte das Problem nicht grundsätzlicher Natur sein, sondern "nur" "Zeichensatzdurcheinander". |
AW: WebDav - Laufwerk - ChatPGT
Zitat:
Ich werde das kleine Experiment mit der KI abbrechen und am Wochenende bei null Anfangen in dem Bereich und mich einlesen. Grade der Bereich Cloud und seine verschiedenen Erscheinungen, werden in einigen Monaten eine Rolle bei meiner Arbeit spielen. Ich merke hier, ich sollte da besser richtig durchsteigen können. |
AW: WebDav - Laufwerk - ChatPGT
Ich denke mal die KI kann nicht grundsätzlich "Delphi".
Intelligent wäre es ja, wenn intern sowas wie eine Basissprache steckt, welche dann jeweils nach C++, Delphi, Sonstwas übersetzt würde. Zuzüglich einiger Parameter zu Anpassung an gewisse Sprachfeatures. Das zeigt z.B. dass ChatPGT uns ein CASE mit Strings geben will ... wäre zu geil, wenn es ginge, aber. Vielleicht wird es besser, wenn man ihm sagt, dass man ein "aktuelleres" Delphi hat, bzw. was es diesbezüglich ändern müsste, damit es passt. Oder man muß sich eben selbst um ein paar Feinheiten kümmern und nimmt das vom Bot nur als Vorlage / grobe Empfehlung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz