string(Integer)
Nachdem ich mit der Lösung aus diesem Thread viele Jahre ganz gut gefahren bin, habe ich dann doch mein Programm auf 64 Bit umgestellt. Zu meiner großen Verblüffung ging das vergleichsweise problemlos; da stecken eine Reihe von Komponenten drin, die doch recht betagt sind.
Dann beschwerte sich der Compiler an dieser Stelle:
Delphi-Quellcode:
string(ResID) ??! Man lernt ja nicht aus.
procedure TPngImage.LoadFromResourceID(Instance: HInst; ResID: Integer);
begin LoadFromResourceName(Instance, string(ResID)); end; Nach Lektüre von
Delphi-Quellcode:
habe ich dann folgende Lösung gefunden:
LoadFromResourceName
Delphi-Quellcode:
Ich weiß aber noch nicht mal, ob das funktioniert. Wieso geht
LoadFromResourceName(Instance, '#' + IntToStr(ResID));
Delphi-Quellcode:
? Warum nicht mehr unter 64 Bit? Ist meine Lösung korrekt?
string(ResID)
|
AW: string(Integer)
Hallo,
LoadFromResourceName war wohl unter 32Bit überladen (overload). Update: Bei mir ist es nicht überladen und der Typecast erzeugt einen Compiler-Fehler (ungültige Typumwandlung). |
AW: string(Integer)
Wieso compilierst du überhaupt TPngImage, wo das doch in Vcl.Imaging.pngimage bereits mitgeliefert wird?
|
AW: string(Integer)
Hallo,
Zitat:
|
AW: string(Integer)
Zitat:
Ich bin aber recht sicher, dass du die Antworten auf meine Fragen weißt, möchtest du sie nicht geben? |
AW: string(Integer)
Hallo,
dann benenn doch PngImage.pas um, dann Shift+F9 und schon meldet der Compiler die "verirrte" Unit ;) Ich dachte, Du benutzt die Unit. Interessant ist der typecast trotzdem. aber ich glaube, dass da was Sinnvolles rauskommt
Delphi-Quellcode:
Zugriffsverletzung innerhalb der Windows-eigenen Dlls.
i:= 100;
MessageBox(0, PChar(String(i)), '', 0); Ein harter Typecast mag den Compiler zufriedenstellen, aber ob zur Laufzeit was richtiges rauskommt ... |
AW: string(Integer)
Zitat:
Delphi-Quellcode:
Da ist nichts überladen.
procedure TPngImage.LoadFromResourceName(Instance: HInst; const Name: String);
var ResStream: TResourceStream; begin try ResStream := TResourceStream.Create(Instance, Name, RT_RCDATA); except RaiseError(EPNGCouldNotLoadResource, EPNGCouldNotLoadResourceText); exit; end; try LoadFromStream(ResStream); finally ResStream.Free; end; end; |
AW: string(Integer)
Hallo,
ja, siehe mein voriger Post. |
AW: string(Integer)
Zitat:
|
AW: string(Integer)
Hallo,
die Unit ausklammern? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 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