Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Probleme bei der String-Konvertierung (https://www.delphipraxis.net/206987-probleme-bei-der-string-konvertierung.html)

skoschke 15. Feb 2021 10:01

Delphi-Version: 5

Probleme bei der String-Konvertierung
 
Hallo,

ich benutze die Debenu Foxit PDF-Library unter Windows und unter Android.
Die Keys zur Freischaltung funktionieren unter Windows, nicht aber unter Android.

Die Entwickler haben mir folgendes geantwortet:

Because of this the ".so" file expects 32-bit character strings as input.
But you are using the ".so" file in Delphi and Delphi by default uses 16-bit character strings.
So in order to make it work in delphi you have to convert the license key string to 32-bit character set.

Mein Code ist momentan:
Delphi-Quellcode:
var
key : string;
begin
key := 'js5me41f8di7as31z7nd8ob4y';
....

wie bekomme ich den key in ein 32-bit character set?

Danke
Ciao
Stefan

DieDolly 15. Feb 2021 10:59

AW: Probleme bei der String-Konvertierung
 
Ich kenne mich damit nicht gut aus. Aber Delphi und standardmäßig 16-bit-Charakter-Strings?

Uwe Raabe 15. Feb 2021 11:16

AW: Probleme bei der String-Konvertierung
 
Zitat:

Zitat von DieDolly (Beitrag 1482992)
Ich kenne mich damit nicht gut aus. Aber Delphi und standardmäßig 16-bit-Charakter-Strings?

Seit Delphi 2009 gilt: 16-Bit = 2 Byte = Sizeof(Char)

Rolf Frei 15. Feb 2021 12:14

AW: Probleme bei der String-Konvertierung
 
Delphi enthält eine Unit System.Character.pas. Darin gibt es TCharacter.ConvertToUtf32. Damit sollte es eigentlich möglich sein, deinen Delphi String in einen UCS-4 32 Bit String zu konvertieren.

Uwe Raabe 15. Feb 2021 12:36

AW: Probleme bei der String-Konvertierung
 
So etwa in der Art:
Delphi-Quellcode:
var
  key: string;
  key4: UCS4String;
  I: Integer;
begin
  key := 'js5me41f8di7as31z7nd8ob4y';
  SetLength(key4, Length(key));
  for I := 0 to key.Length - 1 do begin
    key4[I] := key.Chars[I].ToUCS4Char;
  end;
end;
Wie man das dann aber weitergibt kann ich auch nicht sagen. Wie sieht das denn unter Windows aus?

himitsu 15. Feb 2021 16:21

AW: Probleme bei der String-Konvertierung
 
Delphi-Referenz durchsuchenWideStringToUCS4String aus http://docwiki.embarcadero.com/RADSt...erungsroutinen

Demo: http://docwiki.embarcadero.com/CodeE...rsion_(Delphi)



Theoretisch hätte man natürlich zuerst Denken können, man nehme einfach TEncoding/MultiByteToWideChar und erzeuge codiere damit die Bytes für UCS-4 bzw. UTF-32, aber
https://stackoverflow.com/questions/...01-12000-12001

skoschke 16. Feb 2021 09:14

AW: Probleme bei der String-Konvertierung
 
Delphi-Quellcode:
key4[I] := key.Chars[I].ToUCS4Char;
funktioniert leider nicht!
[DCC Fehler] Unit5.pas(63): E2018 Record, Objekt oder Klassentyp erforderlich
[DCC Fehler] Unit5.pas(76): E2010 Inkompatible Typen: 'string' und 'UCS4String'

Unter Windows läßt sich die Foxit Library problemlos freischalten.

Was ich aber auch noch festgestellt habe:
Alles funktioniert mit "normalem String" unter Delphi 10.3.3, die Probleme gibt es dann unter Delphi 10.4.1!

Nur muss ich Delphi 10.4.1 benutzen um auch Android 11 Devices unterstützen zu können, mit 10.3.3 compiliert schließen sich die Apps unter Android 11 sofort nach Start wieder!

Ciao
Stefan

Uwe Raabe 16. Feb 2021 09:35

AW: Probleme bei der String-Konvertierung
 
Zitat:

Zitat von skoschke (Beitrag 1483093)
Delphi-Quellcode:
key4[I] := key.Chars[I].ToUCS4Char;
funktioniert leider nicht!
[DCC Fehler] Unit5.pas(63): E2018 Record, Objekt oder Klassentyp erforderlich
[DCC Fehler] Unit5.pas(76): E2010 Inkompatible Typen: 'string' und 'UCS4String'

Hast du System.Character in der uses-Anweisung?

Und was steht in Zeile 76?

Union 16. Feb 2021 12:30

AW: Probleme bei der String-Konvertierung
 
In der Dokumentation steht WideString als Datentyp:

Zitat:

Zitat von debenu
Delphi-Quellcode:
function TDebenuPDFLibrary1811.UnlockKey(LicenseKey: WideString): Integer;


Rolf Frei 16. Feb 2021 15:53

AW: Probleme bei der String-Konvertierung
 
Dann ist aber die Doku und die Interfacdeklaration zur DLL ziemlich falsch. Sowohl WideString als auch wchar_t (C++) ist ein 16 Bit String und nicht UCS4 32 Bit.

hoika 17. Feb 2021 06:40

AW: Probleme bei der String-Konvertierung
 
Hallo,
ich würde mal die Debenu-Entwickler bitten,
ein Android-Beispiel zur Verfügung zu stellen.

skoschke 18. Feb 2021 06:58

AW: Probleme bei der String-Konvertierung
 
Hallo,

Debenu hat sich gemeldet und das Problem gelöst!
Es war (wie ich in einem anderen Thread schon schrieb) die Änderung von Embarcadero, dass ab 10.4.1 auch unter Android die Strings ihre Zeichen ab 1 zählen, davor war die Zählung 0 basiert...

Ciao
Stefan

himitsu 18. Feb 2021 09:02

AW: Probleme bei der String-Konvertierung
 
http://docwiki.embarcadero.com/RADSt...rings_(Delphi)
http://docwiki.embarcadero.com/RADSt...rings_(Delphi)

Ach, ham'se den "Standard" wieder geändert?

Seit Einführung der mobilen Platformen waren dort Strings ab 0 aktiv, aber konnte man abstellen/zurückstellen.


Stimmt, in der englischen Hilfe steht es nun, wobei Android garnichts "explizit" in der OH genannt wird. (nur das komische IOS)
Zitat:

Zitat von OH
Compilers (desktop and mobile) have as predefined {$ZEROBASEDSTRINGS OFF} indicating the use 1-based string indexes.
Note: Previous to Delphi 10.4 the mobile compilers used by default 0-based indexing for strings.

In general terms, string indexing is now uniform across platforms and uses 1-based index model.

Notice however that:
* Delphi string type helpers (TStringHelper) remain 0-based.
* All Delphi global flat functions are 1-based.


Erst das blöde ARC weg und nun die Strings endlich wieder überall "standardmäßig" einheitlich gleich.
Nun kann man endlich anfangen wirklich multiplatform entwickeln, ohne überall unnötig grauenhaft die Strings und Objekte anders behandeln zu müssen.
:cat: :bounce1: :firejump: :cheer::cheer::cheer::cheer::cheer::cheer: :drunken: :love: :dp: :party:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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