Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Stringlänge parsen (https://www.delphipraxis.net/193739-stringlaenge-parsen.html)

EWeiss 4. Sep 2017 16:09

AW: Stringlänge parsen
 
Zitat:

Das ist doch eine ganz normale Frage?
Jo einmalig aber nicht fortlaufend.

Zitat:

Ich will ja nicht meckern, aber hast du das gerade aus dem Gedächtnis abgetippt oder irgendwoher kopiert?
Ist die selbstgemacht oder irgendwoher kopiert?
Mache ich überhaupt was selbst oder kopiere ich nur alles... LOL.
Ach was soll's

gruss

TiGü 4. Sep 2017 16:10

AW: Stringlänge parsen
 
Zitat:

Zitat von EWeiss (Beitrag 1380278)

Delphi-Quellcode:
function GdipCreateFontFamilyFromName(
  name: WideString;
  fontCollection: Pointer;
  out FontFamily: GpFontFamily
): GPSTATUS; stdcall; external LibGdiPlus;
Was für ein PWideChar?
und so könnte ich weiter machen... aber lassen wir das.

Bist du fertig mit editieren oder kann man mal antworten?
Immer diese Unart, die Beiträge nachträglich zu editieren und neues Zeug rein zuschreiben, anstatt einen neuen Beitrag zu erstellen.
Kannst du dir das nicht mal abgewöhnen? :roll:

Die von dir genannte Funktion ist bspw. bei mir so definiert:

Delphi-Quellcode:
//----------------------------------------------------------------------------
// FontFamily APIs
//----------------------------------------------------------------------------

  function GdipCreateFontFamilyFromName(name: PWCHAR;
    fontCollection: GPFONTCOLLECTION;
    out FontFamily: GPFONTFAMILY): GPSTATUS; stdcall;
  {$EXTERNALSYM GdipCreateFontFamilyFromName}
Daher meine Frage, woher deine GDIPlus-Übersetzung stammt.
Wenn du willst, kann ich dir ja mal meine Pascal-Unit zukommen lassen.

EWeiss 4. Sep 2017 16:20

AW: Stringlänge parsen
 
Ich habe diese Funktion editiert da sie mit PWCHAR nicht mit meinem Wrapper kompatible ist.
Und nein es gibt keine Problem sonst hätte mir GdipCheck das schon gemeldet.

Ich verwende nix von progdigy sondern habe meine eigene Unit erstellt auf der Basis von Win32Api.
Delphi hat die Eigenschaft alles unnötig aufzubauschen.
Sieht man ja an den Kompilaten ;)

mag ja sein das ich ein zwei Sachen nicht initialisiert habe.. meine Regel ist solange der Compiler nicht meckert kompiliert
und alles rund läuft sollte das schon gut sein.

gruss

EWeiss 4. Sep 2017 16:31

AW: Stringlänge parsen
 
Ach so das noch ;)
Neue Post! 8-)

Delphi-Quellcode:
strFormat: GPSTRINGFORMAT; // Tigü: war nicht definiert
boundingBox, layoutRect: TGPRectF; // Tigü: war nicht definiert
war definiert nur nicht in der Funktion daher muss hier auch nix auf NIL gesetzt werden da GLOBAL!

Delphi-Quellcode:
var
  strFormat: GPSTRINGFORMAT;
  boundingBox: TGPRectF;
  layoutRect: TGPRectF;
  rcLayout: TGPRectF;
  brush: Pointer;
Das kannst du natürlich nicht sehen.

EDIT:

Delphi-Quellcode:
Graphics: GPGRAPHICS; // Tigü: Hier war ein falscher Typ (Cardinal)

Der Typ ist nicht falsch wenn er das wäre würde mein ganzer Quelltext nicht funktionieren.
Das ist eine Auslegungs Sache wie ich Graphics definiere.
IN VB ist es Long, in PowerBasik ist es DWORD und bei mir ist es Cardinal (DWORD) wenn du so willst.

gruss

TiGü 4. Sep 2017 16:42

AW: Stringlänge parsen
 
Zitat:

Zitat von EWeiss (Beitrag 1380283)
Ich habe diese Funktion editiert da sie mit PWCHAR nicht mit meinem Wrapper kompatible ist.
Und nein es gibt keine Problem sonst hätte mir GdipCheck das schon gemeldet.

Ich verwende nix von progdigy sondern habe meine eigene Unit erstellt auf der Basis von Win32Api.
Delphi hat die Eigenschaft alles unnötig aufzubauschen.
Sieht man ja an den Kompilaten ;)

Du wirst schon wissen was du tust, aber wäre es nicht sinnvoller gewesen deinen Wrapper entsprechend anzupassen, anstatt die Übersetzung der DLL-Funktion?

Schau mal hier, wie die Jungs vom Wine-Projekt das gelöst haben: https://source.winehq.org/WineAPI/Gd...yFromName.html

Du bist ja nun inzwischen etwas sattelfester in C/C++.
Was für ein Typ hat das erste Argument?

Zitat:

Zitat von EWeiss (Beitrag 1380283)
mag ja sein das ich ein zwei Sachen nicht initialisiert habe.. meine Regel ist solange der Compiler nicht meckert kompiliert
und alles rund läuft sollte das schon gut sein.

Auch wenn wir uns sowas alle wünschen würden, aber der Compiler ist da etwas schludderig und keine Hilfe.
Kann es sein, dass bei dir strFormat, boundingBox und layoutRect globale Variablen sind? :twisted:
Die fehlen schlicht und ergreifend in der Funktion und deswegen kann es nicht kompilieren.
Wenn ich das nun einfüge und die beiden Rechtecke nicht per FillChar (oder ZeroMemory) initialisiere, haben die zufällige Werte und werden von GdipMeasureString nicht richtig ausgefüllt bzw. falsch übernommen.
Das knallt dann spätestens beim berechnen von bH oder bW, weil Round einen "invalid floting point operation"-Fehler wirft.

EWeiss 4. Sep 2017 16:48

AW: Stringlänge parsen
 
Zitat:

Kann es sein, dass bei dir strFormat, boundingBox und layoutRect globale Variablen sind?
korrekt.. sind global habe ich ja einen Post über dir geschrieben.

Delphi-Quellcode:
        FillChar(boundingBox, SizeOf(boundingBox), 0);
        FillChar(layoutRect, SizeOf(layoutRect), 0);
Das ist OK! Habe es addiert.
Danke.

gruss

TiGü 4. Sep 2017 16:57

AW: Stringlänge parsen
 
Zitat:

Zitat von EWeiss (Beitrag 1380284)
EDIT:

Delphi-Quellcode:
Graphics: GPGRAPHICS; // Tigü: Hier war ein falscher Typ (Cardinal)

Der Typ ist nicht falsch wenn er das wäre würde mein ganzer Quelltext nicht funktionieren.
Das ist eine Auslegungs Sache wie ich Graphics definiere.
IN VB ist es Long, in PowerBasik ist es DWORD und bei mir ist es Cardinal (DWORD) wenn du so willst.

Ich möchte dich an dieser Stelle ausdrücklich warnen! :!:
Das funktioniert wunderbar für 32-Bit bis ans Ende aller Tage.

Aber unter 64-Bit wirst du schnell merkwürdige Fehler (höchstwahrscheinlich) bekommen (können).
Die GDIPLUS-DLL wird dir 64-Bit Zeiger geben (Länge 8 Byte) und du wirst hart auf 32-Bit Länge casten und damit die Adresse abschneiden.
Das führt unweigerlich zu merkwürdigen Fehlern und Zugriffsverletzungen.
Das gilt auch für alle anderen Typen wie bpsw. Brush, Texture, Gradienten, Pen, Image, Bitmap, StringFormat, FontFamily etc. pp.

TiGü 4. Sep 2017 17:00

AW: Stringlänge parsen
 
Hier mal ein Beispiel was falsche, nicht mitwachsende Typen für Ärger sorgen können:
http://www.delphipraxis.net/181512-s...imagelist.html

EWeiss 4. Sep 2017 17:05

AW: Stringlänge parsen
 
Das ist korrekt was du sagst deshalb verwende ich für 64Bit ja auch die "normale" GDIPlus vom http://www.progdigy.com ;)

Ich weis das Graphics, Image und einige andere variablen Pointer sind.
Bei mir sind diese fast alle Cardinal und glaube mir in 32Bit gibt es keine Probleme.

Ich hatte einfach keine Lust 5 Units für 3 API Funktionen in meine LIB einzubinden die machen alleine schon 1MB aus.

gruss

EWeiss 4. Sep 2017 17:15

AW: Stringlänge parsen
 
Nun ja wirklich weiter bin ich noch nicht muss mich mal schlau machen was Glados mit QuickSort meint.
Kenn mich damit nicht aus.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 3 von 6     123 45     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 by Thomas Breitkreuz