AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Lokalisierung: Name der geladenen Resource-DLL herausfinden?
Thema durchsuchen
Ansicht
Themen-Optionen

Lokalisierung: Name der geladenen Resource-DLL herausfinden?

Ein Thema von Deep-Sea · begonnen am 12. Aug 2008 · letzter Beitrag vom 13. Aug 2008
Antwort Antwort
Seite 2 von 2     12   
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#11

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 21:53
@OldGrumpy ja schande über mich... ich mach das nebenher, daher editiere ich meine Beiträge im Laufe der Zeit auch ein paarmal, siehe oben.

Um meine Verpeiltheit wieder gut zu machen hier nun ein Vorschlag, um das ausgängliche Problem des Threadstellers zu illustrieren:
Delphi-Quellcode:
procedure EnumModulesOf(pid : Cardinal);
var
  hProcess: Cardinal;
  Modules: Array[0..65535] of hModule;
  cbNeeded:Cardinal;
  i: integer;
begin
  hProcess := OpenProcess(PROCESS_ALL_ACCESS,false,pid);
  if hProcess <> 0 then
  begin
    EnumProcessModules(hProcess,@Modules,65536,cbNeeded);
    if 65536 < cbNeeded div SizeOf(HModule) then writeln('Too many modules loaded. Not all modules will be displayed.');
    for i := 1 to cbNeeded div SizeOf(HModule)-1 do
    begin
      if _GetModuleFileName(Modules[i]) <> 'then
        writeln(' ',inttohex(Modules[i],8),' : ',_GetModuleFileName(Modules[i]))
      else
        writeln(' ',inttohex(Modules[i],8),' : unknown');
    end;
    CloseHandle(hProcess);
  end
  else
    writeln('could not open process #',pid);
  readln;
end;
in der Tat gibt es viele Module, die keinen Dateinamen haben, obwohl sie aufgelistet wurden
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 22:00
Joah, ganz dolle. Natürlich kann man das Problem fast beliebig komplex lösen, aber wozu das? Oben im Thread gibts den ganz schlichten Vorschlag den Dateinamen innerhalb der Resourcen-DLL zu verankern, so steht er praktisch automatisch zur Verfügung. Warum dann noch unglaubliche Klimmzüge veranstalten? Weil man es kann?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#13

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 22:45
Mir ist auch nicht ganz klar, wass der Threadersteller mit
Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache. meint. Ich hab dazu folgendes gefunden.
Damit kämen wir dann auch zu dem Vorschlag von OldGrumpy, einen Namensstring oder eine TellMyName() Funktion zu exportieren und das Problem wäre gelöst, oder?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 13. Aug 2008, 07:27
Hallo Chris,

Zitat von Deep-Sea:
... Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache. ...
LoadLibraryEx() mit der Option LOAD_LIBRARY_AS_DATAFILE erzeugt effektiv einen memory mapped file. Du kannst dir den Namen also so besorgen:

Delphi-Quellcode:
function ResFileName(mmf: HMODULE; var fn: TFileName): Boolean;
var
  modName: array [0..MAX_PATH] of Char;
  n: Integer;
begin
  n := GetMappedFileName(GetCurrentProcess, Pointer(mmf), modName, SizeOf (modName));
  Result := n > 0;
  if Result then
    SetString(fn, modName, n);
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#15

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 13. Aug 2008, 07:34
Ich habs! [edit] Aber marabu war schneller thx [/edit]
Die Lösung liegt in der Funktion GetMappedFileName (zu finden in der PsAPI).
Nett von MS, immer zu schreiben wie es nicht geht, aber nicht ein mal zu erwähnen wie es geht ...



Zitat von helgew:
Mir ist auch nicht ganz klar, wass der Threadersteller mit
Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache. meint. Ich hab dazu folgendes gefunden.
Damit kämen wir dann auch zu dem Vorschlag von OldGrumpy, einen Namensstring oder eine TellMyName() Funktion zu exportieren und das Problem wäre gelöst, oder?
Ich will nun einmal wissen, unter welcher Sprache meine Applikation läuft. Dies brauche ich für andere zu lokalisierende Dinge, die nicht in der Resource-DLL enthalten sind (Ordner mit Texten drin z.B.).
Die Funktion von deinem Link setzt zwar welche Sprache Delphi nutzen sollte, dass heißt aber noch lange nicht, dass er das auch tut. Existiert z.B. die angegebene Datei nicht oder kann nicht geladen werden, sucht er nach Dateien die der aktuellen "Thread-Sprache" (GetThreadLocale) entsprechen. Welche Datei nun letztendlich geladen ist, weiß man so nie.


Zu den Posts mit "String mit der Sprache in die Resource-DLL packen": Ya, sowas hatte ich auch schon im Kopf ...



Nun ja, so klappt es ya doch noch wie gewünscht, danke an euch für eure Hilfe
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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