AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi EnumResourceLanguages + RT_STRING findet nichts
Thema durchsuchen
Ansicht
Themen-Optionen

EnumResourceLanguages + RT_STRING findet nichts

Ein Thema von himitsu · begonnen am 5. Dez 2007 · letzter Beitrag vom 5. Dez 2007
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

EnumResourceLanguages + RT_STRING findet nichts

  Alt 5. Dez 2007, 15:15
ich wollte die verfügbaren Sprachen (in meiner EXE) für einen ResourceString (String Table Entry) rausfinden, aber irgendwie wird nichts gefungen.

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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: EnumResourceLanguages + RT_STRING findet nichts

  Alt 5. Dez 2007, 18:03
Die Callback Funktion muss global deklariert werden, also nicht im Deklarationsteil der Funktion die EnumResource* aufruft. Hast du das so?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: EnumResourceLanguages + RT_STRING findet nichts

  Alt 5. Dez 2007, 18:11
Ach sch***

mir isses grad wie Schuppen aus den Haaren gefallen

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

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

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
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:16 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