Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi EnumResourceLanguages + RT_STRING findet nichts (https://www.delphipraxis.net/104509-enumresourcelanguages-rt_string-findet-nichts.html)

himitsu 5. Dez 2007 14:15


EnumResourceLanguages + RT_STRING findet nichts
 
ich wollte die verfügbaren Sprachen (in meiner EXE) für einen ResourceString (String Table Entry) rausfinden, aber irgendwie wird nichts gefungen. :gruebel:

Delphi-Quellcode:
// Msg: Integer = ResourceID
EnumResourceLanguages(HInstance, RT_STRING,
  PChar(Msg), @EnumResLangProc, Integer(@LangIDs));
Ergebnis:
Zitat:

Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden.
Der String ist vorhanden und es geht mit allen Strings (StringID) nicht.
LoadString läd den String zwar, aber ich wollte die Sprache selbst auswählen und auf EnumResourceLanguages+FormatMessage umsteigen, mit ich selbst die sprache auswählen kann.


ResID als String ging auch nicht ... was ist hier denn falsch? :?


[add]
ach ja, EnumResLangProc wird garnicht erst aufgerufen,
also darin ist der Fehler nicht zu finden
und bei anderen ResTypen funktioniert es ja

Zacherl 5. Dez 2007 17:03

Re: EnumResourceLanguages + RT_STRING findet nichts
 
Die Callback Funktion muss global deklariert werden, also nicht im Deklarationsteil der Funktion die EnumResource* aufruft. Hast du das so?

himitsu 5. Dez 2007 17:11

Re: EnumResourceLanguages + RT_STRING findet nichts
 
Ach sch***

mir isses grad wie Schuppen aus den Haaren gefallen :wall:

die ResourceStrings werden ja in Gruppen in den Resourcen gespeichert.

und zwar in 16er-Grüppchen

muß also (Msg div 16) rechnen
und mir dann den (Msg mod 16)-ten String aus dem Stringsalat rauskopieren :nerd:

Delphi-Quellcode:
EnumResourceLanguagesW(HInstance, PWideChar(RT_STRING),
  PWideChar(Msg shr 4), @EnumResLangProcW, Integer(@LangIDs));

Also Problem gelöst:
bei allen Resourcen kann man direkt über die ID zugreifen,
außer bei RT_STRING's, wo man in 16er-Gruppen arbeiten muß.

LoadString/FormatMessage nimmt auch die ID und zerlegt sich das intern selber.



hab einfach zulange nichtmehr sowas gemacht und mich jetzt tagelang umsonst damit gequält :oops:

und eigentlich kann ich noch froh sein, daß ich keine Komflikte in der Datei bekommen hab, weil die String-ID's jetzt in Wirklichkeit 16-mal kleiner sind


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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