AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI+ Delphi Berlin oder höher

GDI+ Delphi Berlin oder höher

Ein Thema von Willie1 · begonnen am 12. Aug 2020 · letzter Beitrag vom 18. Aug 2020
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.045 Beiträge
 
Delphi 12 Athens
 
#1

AW: GDI+ Delphi Berlin oder höher

  Alt 13. Aug 2020, 20:04
Es gibt keinen Stringtyp Compilerschalter.

Delphi hängt automatisch #0 an Strings an um diese leichter
an WinApi Aufrufe übergeben zu können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GDI+ Delphi Berlin oder höher

  Alt 13. Aug 2020, 21:11
Jupp, wenn man den String richtig gefüllt hat, dann ist im Inhalt keine #0 mehr drin.


Den Compilerschalter kann es leider nicht geben.

Man könnte ja nur lokal, in seiner Unit, den Typ ändern.
Aber die Funktionen betrifft das nicht.

Vorallem in den APIs sind diese ja nicht Überladen, sondern heißen alle anders.
String, PChar und Char in deiner Unit OK,
aber CreateFile wird in einer anderen Unit auf CreateFileW umgeleitet. Und Diese ist vorkompiliert und somit quasi unveränderlich.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#3

AW: GDI+ Delphi Berlin oder höher

  Alt 13. Aug 2020, 22:47
Du kannst einen String als AnsiString deklarieren: var AnsiTxt: AnsiString;
Das sollte im Zusammenhang mit GDI+ aber gar nicht nötig sein; bei ASCII - also Property-Typ 2 - solltest du mit SetString(ZielTxt, PAnsiChar(PPropItem.value), PPropItem.length - 1)); ohne Probleme hinkommen. Mich würde ein Beispiel interessieren, sollte das doch mal nicht der Fall sein.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: GDI+ Delphi Berlin oder höher

  Alt 14. Aug 2020, 07:24
Ich weiß gerade nicht ob per Inception das machbar ist.
Mit Vcl's weiß ich es zu 100pro das es klappt.
Dient mir als Ersatz für "Helper" wenn ich mich immer nur an's original halten möchte.
Eine Unit erstellen wo lediglich "String" als "AnsiString" definiert wird.
Diese Unit dann als letzte in Deinem Projekt einbinden.
Schon ist wieder alles wie vor 20 Jahren, aber ob man das wirklich will ist jedem selbst überlassen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GDI+ Delphi Berlin oder höher

  Alt 14. Aug 2020, 13:37
Wie gesagt, es ist egal, denn du kannst nur den Typ in deiner Unit mit einem anderen Typen überdecken,
aber externe Definitionen beeinflusst es nicht.

Abgesehn davon ist String schwachsinniger Weise seit Jahrzehnten immernoch ein resserviertes Wort und da geht Vieles nicht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
698 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: GDI+ Delphi Berlin oder höher

  Alt 15. Aug 2020, 16:36
Ich habe in meiner Bibliothek alle string durch AnsiString, PChar durch PAnsiChar und alle Char durch AnsiChar ersetzt, TstringList bleibt unverändert, und der Compiler meckert bei meinem Testprogramm nicht mehr. Bei Filename habe ich string durch TFilename ersetzt. Jetzt läuft es auch mit dem GDP-Dateien von 2003. Verrenkungen bei string sind also nicht nötig. "Alte Sünden werden nicht vergessen" bei meiner Lösung crasht es bei Bildern vom IPhone, das war und ist immer noch so. Jetzt packt mich der Ehrgeiz auch das will ich lösen.
Delphi-Quellcode:
          else //alle anderen
          with PropItem^ do begin
            Move(Value^, RationalBuff, Length);
            R1:=RationalBuff[0];
            R2:=RationalBuff[1];
            s:=Format('%d/%d',[R1,R2]);
            try
            s1:=ShowID(ShowTagStr, GetMetaDataIDString(id), PropID);
            except
              Result:=s;
              Exit;
            end;
            Result:=Format('%s %s',[s1,s])
          end;
Es geht um PropertyItem^.id, der Debugger zeigt eine Cardinal-Zahl an, wenn es klappt und meldet "nicht verfügbarer Wert", wenn es crasht. Die Routine liefert ein richtiges Result und erst beim Verlassen der Funktion gibt es den Zugriffsfehler.
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (15. Aug 2020 um 16:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GDI+ Delphi Berlin oder höher

  Alt 15. Aug 2020, 17:44
Was ist RationalBuff?

Bei dem MOVE, könnte man z.B. an ungültige Zeiger und einen Bufferoverflow denken.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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