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 Wie bekommt man ResourceString ID wenn man den String hat? (https://www.delphipraxis.net/28549-wie-bekommt-man-resourcestring-id-wenn-man-den-string-hat.html)

GuenterS 26. Aug 2004 09:46


Wie bekommt man ResourceString ID wenn man den String hat?
 
Hallo,

ich habe folgendes Problem. Ich nutze Multilizer 6, welches direkt und sofort alle Resourcestrings übersetzt, damit bin ich jetzt auch sehr zufrieden. Das geht mit dem Tool sehr gut.

Jetzt habe ich aber das Problem, dass ich diese Strings ja auch für Loggingzwecke verwende und ich für diesen Fall natürlich keine Übersetzung wünsche.

Nachdem die Strings in entsprechenden resource "DLL"s gespeichert werden, müßte ich "nur" wissen, welche ID diesem String zugewisen wurde um den entsprechenden String dann in der Englischen DLL zu finden.

Soll ungefähr so gehen...

Delphi-Quellcode:
function getEnglischString(const ATranslatedString: integer): string;
const
  CEnglishDLL = 'C:\d7\Local.App\ML6\DummyProject.EN';
var
  lResRec: PResStringRec;
  lDLLHandle: Cardinal;
  lIdentifier: integer;
begin
  Result := '';
  lResRec := new(PResStringRec);
  try
    lDLLHandle := LoadLibraryEx(PChar(CEnglishDLL), 0, LOAD_LIBRARY_AS_DATAFILE);
    if lDLLHandle <> INVALID_HANDLE_VALUE then
    begin
      lIdentifier := getResourceIDFromString(ATranslatedString); //die Funktion ist gesucht...
      lResRec^.Module := @lDLLHandle;
      lResRec^.Identifier := lIdentifier;
      Result := LoadResString(lResRec);
    end;
  finally
    dispose(lResRec);
  end;
end;

Chewie 26. Aug 2004 10:27

Re: Wie bekommt man ResourceString ID wenn man den String ha
 
Schau dir mal MSDN-Library durchsuchenEnumResourceNames an. Das ist zwar kein direkter Weg, um an die ID zu kommen, aber so kommst du an alle Resourcen. Per Vergleich mit deinem String solltest du die ID ermitteln können.

GuenterS 26. Aug 2004 11:22

Re: Wie bekommt man ResourceString ID wenn man den String ha
 
Es geht auch anders.

Es ist wichtig, dass man wirklich die Adresse des Resourcestrings übergibt,

Delphi-Quellcode:
function getIdentifier(AP: Pointer): integer;
begin
  Result := PResStringRec(AP).Identifier;
end;

Delphi-Quellcode:
...

resourcestring
   sMessage1 = 'Message1';

var
   _Identifier: integer;

_Identifier := getIdentifier(@sMessage1);

...


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