AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi IS_INTRESOURCE funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

IS_INTRESOURCE funktioniert nicht

Ein Thema von Zacherl · begonnen am 2. Mär 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 17:54
Hi,

ich habe folgende Funktion hier in der DP gefunden:

Delphi-Quellcode:
function IS_INTRESOURCE(const p_iParameter : integer) : Boolean;
begin
  Result := (p_iParameter and $FFFF0000) = 0;
end;
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 18:33
Moin Florian,

das sieht irgendwie nach einer alten Funktion von mir aus
(die übrigens falsch deklariert ist )

So müsste es richtig sein:

Delphi-Quellcode:
function IS_INTRESOURCE(const AdwInteger : DWORD) : Longbool;
begin
  Result := (AdwInteger shr 16) = 0;
end;
Es ist eigentlich ein Macro

Zitat von winuser.h:
#define IS_INTRESOURCE(_r) ((((ULONG_PTR)(_r)) >> 16) == 0)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 18:38
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?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 20:04
Moin Florian,

Zitat von Florian Bernd:
Mhh komischerweise funktioniert deine neue Funktion aber auch nicht.
ich denke schon, denn:
Dadurch, dass Du einen Pointer auf integer castest, wird daraus noch lange kein integer Identifier für eine Resource.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 20:09
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 20:14
Moin Florian,

Zitat von Florian:
ShowMessage(IntToStr(Integer(lpszName))) aufrufe, dann wird nichts ausgegeben.
Nichts?
Das kann ja nun nicht sein. Irgendeine Zahl wird es schon sein müssen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 20:20
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 21:25
Moin Florian,

Zitat von Florian Bernd:
Der Integerwert ist eine sehr lange Zahl.
die immer > 65535 ist (Feststellung, keine Frage )
Und dann liefert IS_INTRESOURCE immer false zurück.

Mir fiel inzwischen ein, dass ich ja selber auch mal ein Problem mit Resourcen hatte (LoadString macht Probleme), und aus dem Thread hast Du wohl auch die Deklaration von IS_INTRESOURCE.

Da stellt sich mir die Frage:
Wie liest Du die Daten denn aus?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 22:49
Ich verwende EnumResourceNames(0, RT_RCDATA, @EnumNamesFunc, 0); und meine Callback Funktion lautet so:

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;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: IS_INTRESOURCE funktioniert nicht

  Alt 2. Mär 2007, 23:47
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17: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