AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke WebDav - Laufwerk - ChatPGT
Thema durchsuchen
Ansicht
Themen-Optionen

WebDav - Laufwerk - ChatPGT

Ein Thema von Satyr · begonnen am 3. Feb 2023 · letzter Beitrag vom 4. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 17:03
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 .
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.dllname '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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#2

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 17:16
MapWebDAV ist doch 'ne Funktion, es wird aber nicht abgefragt, was sie zurück gibt.

Sinnvoller wäre sowas:
Delphi-Quellcode:
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);
Dann kann man mit Result abfragen, was denn da so schief ging, siehe WNetAddConnection2A

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.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 17:58
ChatPGT kann ich heute leider nicht mehr nutzeen.
Zu viel blödes Zeug gefragt .

Die MapWebDav Funktion habe ich angepasst wie von Dir beschrieben (hoffe ich).
Wird auch problemlos kompiliert.

Delphi-Quellcode:
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 bekomme jetzt den "Error 1200". Das ist ja schon mal mehr.
Ich tippe auf Zugangsdaten, obwohl die richtig sind. Aber vielleicht irgendwo nicht richtig übermittelt werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 18:22
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Feb 2023 um 18:32 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#5

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 18:31
WNetAddConnection2A liefert Dir die Dokumentation zur aufgerufenen Funktion.

Der Link system error codes im Text der Seite liefert Dir eine Liste der nummerischen Rückgabewerte, die u. a. von WNetAddConnection2A geliefert werden.

Dort nach 1200 gesucht ergibt ERROR_BAD_DEVICE.

In der Dokumentation steht dazu:
Zitat von WNetAddConnection2A:
ERROR_BAD_DEVICE

The specified device name is not valid. This error is returned if the lpLocalName member of the NETRESOURCE structure pointed to by the lpNetResource parameter specifies a device that is not redirectable.
In der Funktion MapWebDAV wird an den zweiten Parameter (den Laufwerksbuchstaben) ein : angehängt. Da Du aber Z: an die Funktion übergibst, wird als Laufwerk Z:: genutzt. Und das ist irgendwie nicht so ganz korrekt, von daher ist der Fehler 1200 aka ERROR_BAD_DEVICE absolut angebracht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 18:35
Bei ihm kommt sogar 'Z'#0':'#0':'#0 an, wobei ebenfalls 'Z'#0':'#0 immernoch ungültig sein würde.
Sowas passiert eben, wenn man einen UnicodeString hart nach PAnsiChar castet, obwohl der Complier davor warnen dürfte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 18:41
Au man, danke. Hab den Doppelpunkt da mal raus genommen.
Der Fehler bleibt. ChatPGT macht es einem wohl doch nicht so einfach .

Ich lese mich am Wochenende näher ein, auch in die Festplattenerstellung vor dem mappen.

Danke
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#8

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 18:57
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 LocalDrive: string; als LocalDrive: Char; zu definieren. Dann kann man da schonmal nicht mehr mehr als den Laufwerksbuchstaben übergeben und sich die Umkopiererei in der Funktion sparen.

Insgesamt dürfte das Problem nicht grundsätzlicher Natur sein, sondern "nur" "Zeichensatzdurcheinander".
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 19:07
Bitte beachte, vor dem Einlesen, was himitsu schreibt.
Definitiv. Danke auch Dir himitsu. Die Warnungen habe ich schon gesehen, fand sie aber nicht hilfreich genug (für mich) um etwas zu ändern das ja kompiliert.


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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WebDav - Laufwerk - ChatPGT

  Alt 3. Feb 2023, 19:27
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.
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