![]() |
IS_INTRESOURCE funktioniert nicht
Hi,
ich habe folgende Funktion hier in der DP gefunden:
Delphi-Quellcode:
Leider gibt sie immer zurück, dass meine Resource ein String ist, obwohl dies nicht stimmen kann, da String(lpszName) = '' ist. Ich füge die Resource mit dem ResourceHacker hinzu. Der Name ist schlicht und einfach 1.
function IS_INTRESOURCE(const p_iParameter : integer) : Boolean;
begin Result := (p_iParameter and $FFFF0000) = 0; end; |
Re: IS_INTRESOURCE funktioniert nicht
Moin Florian,
das sieht irgendwie nach einer alten Funktion von mir aus ;-) (die übrigens falsch deklariert ist :oops:) So müsste es richtig sein:
Delphi-Quellcode:
Es ist eigentlich ein Macro
function IS_INTRESOURCE(const AdwInteger : DWORD) : Longbool;
begin Result := (AdwInteger shr 16) = 0; end; Zitat:
|
Re: IS_INTRESOURCE funktioniert nicht
Mhh komischerweise funktioniert deine neue Funktion aber auch nicht. IS_INTRESOURCE(Integer(lpName)) gibt immer false zurück, wenn ich eine RCDATA Resource mit dem ResourceHacker angehangen habe.
Der Stringwert des Namens ist allerdings auch '' oder wird zumindest nicht gültig von PChar umgewandlet .. Woran könnte das liegen? |
Re: IS_INTRESOURCE funktioniert nicht
Moin Florian,
Zitat:
Dadurch, dass Du einen Pointer auf integer castest, wird daraus noch lange kein integer Identifier für eine Resource. |
Re: IS_INTRESOURCE funktioniert nicht
Nein nein, das meine ich nicht .. wenn ich z.b.
ShowMessage(IntToStr(Integer(lpszName))) aufrufe, dann wird nichts ausgegeben. lpszName bekomme ich aus einem EnumResourceNames Callback. |
Re: IS_INTRESOURCE funktioniert nicht
Moin Florian,
Zitat:
Das kann ja nun nicht sein. Irgendeine Zahl wird es schon sein müssen. |
Re: IS_INTRESOURCE funktioniert nicht
Ne sorry .. so meinte ich .. der Name wird immer als Zeichenkette erkannt, aber z.b.
Showmessage(String(lpszName)); ergibt immer eine leere Zeichenkette. Der Integerwert ist eine sehr lange Zahl. |
Re: IS_INTRESOURCE funktioniert nicht
Moin Florian,
Zitat:
Und dann liefert IS_INTRESOURCE immer false zurück. Mir fiel inzwischen ein, dass ich ja selber auch mal ein Problem mit Resourcen hatte ( ![]() Da stellt sich mir die Frage: Wie liest Du die Daten denn aus? |
Re: IS_INTRESOURCE funktioniert nicht
Ich verwende
Delphi-Quellcode:
und meine Callback Funktion lautet so:
EnumResourceNames(0, RT_RCDATA, @EnumNamesFunc, 0);
Delphi-Quellcode:
function EnumNamesFunc(hModule: THANDLE; lpType, lpName: PChar; lParam: DWORD):BOOL; stdcall;
var Info, FH, BW: DWORD; FileData: TFileData; Params: string; begin Result := True; if IS_INTRESOURCE(Integer(lpName)) then messagebox(0, pchar('int: ' + inttostr(integer(lpname))), '', 0) //FileData := GetFileByID(Integer(lpName)) else messagebox(0, pchar('str: ' + String(lpName)), '', 0); //FileData := GetFileByID(StrToInt(String(lpName))); end; |
Re: IS_INTRESOURCE funktioniert nicht
Moin Florian,
ich kann da keinen Fehler sehen. Wenn ich Deinen Sourcecode mal in dem für den o.g. Thread einbaue (Copy&Paste), und statt meiner EnumResourceNames-Aufrufe benutze, werden mir alle RT_RCDATA Resourcennamen angezeigt, die in der jeweiligen Datei enthalten sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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