Delphi-PRAXiS
Seite 5 von 20   « Erste     345 6715     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 12 ist offiziell da!!! (https://www.delphipraxis.net/214020-delphi-12-ist-offiziell-da.html)

skybibo 8. Nov 2023 11:20

AW: Delphi 12 ist offiziell da!!!
 
Bei der gleichzeitigen Verwendung von Delphi 11 und Delphi 12 habe ich Probleme bei der Verwendung der Parnassus Tools (Bookmarks und Navigator).

Bei Delphi 10.4 wurde für die Parnassus Core die DLL ParnassusCoreEditor_XSydney.dll verwendet. Bei Delphi 11 und Delphi 12 ist es nun ParnassusCoreEditor.dll. Dadurch lassen sich bei mir die Parnassus Tools nicht gleichzeitig in Delphi 11 und Delphi 12 nutzen.

Gibt es hierzu eine Lösung?

Uwe Raabe 8. Nov 2023 12:47

AW: Delphi 12 ist offiziell da!!!
 
Nur so 'ne Idee: Pack die DLLs für die verschiedenen Delphi Versionen in separate Verzeichnisse.

skybibo 8. Nov 2023 13:08

AW: Delphi 12 ist offiziell da!!!
 
Hallo Uwe,

das hatte ich auch schon probiert und unter Experts in der Registry die Pfade angepasst. Leider ist der Pfad für die ParnassusCoreEditor.dll außerhalb von ../BDS/22.0.. (Computer\HKEY_CURRENT_USER\Software\Parnassus OU\Core).

Ich befürchte dass ich an der Stelle auf ein Update von Embarcadero hoffen muss.

Ich finde es nur schade, dass man das Konzept mit der Delphi Version hinter dem Namen nicht weiter geführt hat.

jaenicke 8. Nov 2023 13:26

AW: Delphi 12 ist offiziell da!!!
 
Du könntest eine Batchdatei zum Starten von Delphi nutzen, die vorher den Pfad in der Registry umschaltet.

Da ein direkter Pfad für die DLL bekannt ist, dürften Side-by-Techniken wie .config Dateien nicht funktionieren.

Rolf Frei 8. Nov 2023 14:08

AW: Delphi 12 ist offiziell da!!!
 
Zitat:

Zitat von Bbommel (Beitrag 1529207)
Kurzer Test. REST-API schon wieder kaputt ausgeliefert. Ist ja toll, was ein Schrott.

Leerzeichen und andere Sonderzeichen in Parametern werden falsch kodiert. Aus
Code:
https://test.de?param=my space
sollte werden
Code:
https://test.de?param=my%20space
Delphi macht aber
Code:
https://test.de?param=my%2520space
daraus.

Das heißt, das Ding wird doppelt kodiert und somit das Prozentzeichen auch. Dabei fällt jeder API-Call auf die Nase, der irgendwas mit Zeichen im Aufruf hat, die nicht im Alphabet oder Nummern sind. Dürfte für ein bisschen Spaß sorgen.

Das ist aufgrund des Fixes für meinen Report RSP-38522 passiert. Da haben sie wohl nicht begriffen wie das richtig gefixt werden muss. Und übrigens werden Spaces in Query Parametern mit + codiert und nicht mit %20. %20 gilt nur für die URL ohne Query-Part.

Beispiel: www[dot]test[dot]com/meine%20website/app?query=mein+parameter

Du musst die Parameter separat von der URL codieren! Das ist also womöglich auch noch ein Fehler in deinem Code. Wie kommst du zu deiner anfänglichen URL mit dem Space? Wenn du selber eine URl zusammen baust, musst du die Parameter mit TNetEncoding.URL.EncodeForm('my space') codieren:

Delphi-Quellcode:
  url := TNetEncoding.URL.Encode('https://test.de/meine website') + '?param=' + TNetEncoding.URL.EncodeForm('my space');

Rolf Frei 8. Nov 2023 14:24

AW: Delphi 12 ist offiziell da!!!
 
Zitat:

Zitat von Bbommel (Beitrag 1529215)
Danke für die Anregung, das nochmal zu testen. Der Fehler ist jetzt etwas schwieriger nachzuvollziehen als wahrscheinlich im ursprünglichen Bug-Report vom August. Er tritt jetzt nur noch auf, wenn man den Parameter selbst in die URL mit reinschreibt und nicht mehr, wenn man ihn per "AddParameter" setzt. In D11.2 funktionierten allerdings beide Wege völlig fehlerlos und so sollte es auch weiterhin sein. Es gibt ja diverse Gründe, warum es mal vorkommen kann, dass man nicht AddParameter nutzt, sondern die URL selbst zusammensetzt - in REST-APIs könnte es auch eine durch einen Call vorgegebene URL sein, um weitere Ergebnisse abzurufen (macht die Graph API von Microsoft zum Beispiel). Wäre blöd, wenn Delphi da reingrätscht.

Aber klar, so fällt der Fehler weniger auf.

Beispielprogramm:

Delphi-Quellcode:
program restSpace;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, REST.Client;


var
  myRest: TRESTClient;
  myQuery: TRESTRequest;
  resultText: string;

begin
  myRest:=TRESTClient.Create('https://httpbin.org/');
  myQuery:=TRESTRequest.Create(nil);
  myQuery.Client:=myRest;
  try
    { TODO -oUser -cConsole Main : Code hier einfügen }
    myQuery.Resource:='get?param=hello world';
    myQuery.AddParameter('param_added','hello world');
    myQuery.Execute;

    if (myQuery.Response.StatusCode=200) and (myQuery.Response.JSONValue<>nil) then begin
      resultText:=myQuery.Response.JSONValue.GetValue<string>('args.param','!! Not found !!');
      Writeln(resultText);
      resultText:=myQuery.Response.JSONValue.GetValue<string>('args.param_added','!! Not found !!');
      Writeln(resultText);
      Readln;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  myQuery.Free;
  myRest.Free;
end.
Ausgabe mit D11.2:

Code:
hello world
hello world
Ausgabe mit D12:

Code:
hello%20world
hello world
Tja, wie vorgehen?

Dein Code ist so falsch.
Delphi-Quellcode:
    myQuery.Resource:='get?param=hello world';
Das darfst du nicht so machen. Du gibts hier eine ungültige URL an. Korrekt wäre:
Delphi-Quellcode:
   
    myQuery.Resource:='get?param=' + TNetEncoding.URL.EncodeForm('hello world');
Sollte deine Serveranwendung wirklich fälschlicherweise ein %20 benötigen, kannst du anstatt EncodeForm() einfach nur Encode() nutzen.

Ich vermutet der Fix für RSP-38522 ist somit schon richtig, allerdings müsste man nun im REST Teil eventuell auch noch was anpassen/Korrigieren. Wenn deine Resource aber Parameter entählt solltest du die Codierung vorzugsweise selber machen, damit du da die Kontrolle hast, was und wie du das codierst.

Bbommel 8. Nov 2023 14:37

AW: Delphi 12 ist offiziell da!!!
 
Zitat:

Zitat von Rolf Frei (Beitrag 1529302)
Dein Code ist so falsch.
Delphi-Quellcode:
    myQuery.Resource:='get?param=hello world';
Das darfst du nicht so machen. Du gibts hier eine ungültige URL an. Korrekt wäre:
Delphi-Quellcode:
   
    myQuery.Resource:='get?param=' + TNetEncoding.URL.EncodeForm('hello world');
Sollte deine Serveranwendung wirklich fälschlicherweise ein %20 benötigen, kannst du anstatt EncodeForm() einfach nur Encode() nutzen.

Hi Rolf,

berechtigter Hinweis, aber das war nur ein schnell zusammengeschriebener Beispiel-Code, um das mit dem Dienst von httpbin gut demonstrieren zu können. In meinem echten Code bekomme ich das an den Stellen, an denen die Parameter auf die Art gesetzt werden, wohl auch durch die Nutzung von "AddParameter" gefixt, was dann letztlich auch eine bessere Lösung ist.

Was Delphi aber selbst beim Kodieren der Ressource macht, ist ja dennoch falsch, wenn die URI doppelt kodiert wird. Ich wollte mal testen, ob das auch beim Kodieren der eigentlichen Ressource (also nicht eines möglichen Parameters) passiert. Denn prinzipiell könnte es in einer API ja auch eine Ressource "/get/customer/Hans Meier" oder so ähnlich geben. Bin aber heute nicht dazu gekommen, mir das anzuschauen.

Rolf Frei 8. Nov 2023 14:46

AW: Delphi 12 ist offiziell da!!!
 
Zitat:

Zitat von Bbommel (Beitrag 1529303)
Hi Rolf,

berechtigter Hinweis, aber das war nur ein schnell zusammengeschriebener Beispiel-Code, um das mit dem Dienst von httpbin gut demonstrieren zu können. In meinem echten Code bekomme ich das an den Stellen, an denen die Parameter auf die Art gesetzt werden, wohl auch durch die Nutzung von "AddParameter" gefixt, was dann letztlich auch eine bessere Lösung ist.

Was Delphi aber selbst beim Kodieren der Ressource macht, ist ja dennoch falsch, wenn die URI doppelt kodiert wird. Ich wollte mal testen, ob das auch beim Kodieren der eigentlichen Ressource (also nicht eines möglichen Parameters) passiert. Denn prinzipiell könnte es in einer API ja auch eine Ressource "/get/customer/Hans Meier" oder so ähnlich geben. Bin aber heute nicht dazu gekommen, mir das anzuschauen.

Da ich selber das Delphi REST-Framework nicht nuntze und das lieber alles selber mache, wie ich es benötige, kann ich hierzu nicht viel sagen. Allerdings müsste Delphi das als "/get/customer/Hans%20Meier" codieren, damit das richtig ist. Der Parameterteil muss allerdings ein + enthalten. Ob das Delphi REST Framework das hier korrekt macht, ist dann natürlich die Frage. Aus diesem Grund mache ich das lieber alles selber so wie es sein müsste und verzichte auf diese Klasse. Wenn du das mal testest, würde es mich schon intressieren was dabei rauskommt.

Uwe Raabe 8. Nov 2023 15:08

AW: Delphi 12 ist offiziell da!!!
 
Zitat:

Zitat von skybibo (Beitrag 1529296)
Ich finde es nur schade, dass man das Konzept mit der Delphi Version hinter dem Namen nicht weiter geführt hat.

Hat man anscheinend doch: Wenn du die alte ParnassusCoreEditor.dll (findest du im 22er-CatalogRepository) unter dem Namen ParnassusCoreEditor_XAlexandria.dll in das Verzeichnis c:\Program Files (x86)\Common Files\ParnassusShared\ kopierst, sollte es funktionieren.

PeterPanino 8. Nov 2023 15:11

AW: Delphi 12 ist offiziell da!!!
 
Leider versteckt der Delphi 12 SplashScreen sich immer noch hinter maximierten Fenstern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Seite 5 von 20   « Erste     345 6715     Letzte »    

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-2025 by Thomas Breitkreuz