Seite 1 von 2
können dll´s das aufrufende programm erkennen?
Verfasst: 11.04.2010 23:16
von Mastermar
ich bin neu hier, komme von gfa32 und ich will mich an eine dll-programmierung trauen.
die dll wird von verschiedenen programmen aufgerufen und ich möchte gerne, daß
die dll zB den handle des aufrufenden programmes erkennt, gibt es diese möglichkeit?
vielen dank für antwort!
christian böttgenbach
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 11.04.2010 23:43
von HeX0R
Hiermit z.B. bekommst du den Dateinamen inklusive Pfad der Host-Datei:
Code: Alles auswählen
ProcedureDLL AttachProcess(Instance)
Protected a$
a$ = Space(#MAX_PATH)
GetModuleFileName_(Instance, @a$, #MAX_PATH)
MessageRequester("FileName", "Filename of Host: " + a$)
EndProcedure
Einfach in deine DLL pappen...
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 09:23
von Mastermar
Danke Hexor!
Ich war nicht deutlich genug, es geht mir um die Erkennung des aufrufenden Programmes,
ohne daß dafür ein Parameter übertragen werden muß.
Noch konkreter: Hier entsteht ein Programmierspiel, bei dem die Programme eine DLL aufrufen.
Ich möchte nun unterscheiden können, welches Programm die DLL aufruft, ohne daß dafür
bei jedem Befehl ein _Instance oder sonstiger Parameter mitgeliefert werden muß, sonst kommt
noch ein Schlaumeier daher und schickt von einer Fake-instance Befehle

Außerdem würde ich
gerne vermeiden, daß bei jedem Befehl ein Parameter mehr mit übertragen werden muß.
Kennt jemand die Lösung, wie ich bei einem DLL aufruf den aufrufenden Prozeß erkennen kann?
Christian Böttgenbach
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 10:02
von Rings
Code: Alles auswählen
a$ = Space(#MAX_PATH)
GetModuleFileName_(0, @a$, #MAX_PATH)
MessageRequester("FileName", "Filename of Host: " + a$)
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 10:26
von a14xerus
Mastermar hat geschrieben:
Ich war nicht deutlich genug, es geht mir um die Erkennung des aufrufenden Programmes,
ohne daß dafür ein Parameter übertragen werden muß.
Noch konkreter: Hier entsteht ein Programmierspiel, bei dem die Programme eine DLL aufrufen.
Ich möchte nun unterscheiden können, welches Programm die DLL aufruft, ohne daß dafür
bei jedem Befehl ein _Instance oder sonstiger Parameter mitgeliefert werden muß, sonst kommt
noch ein Schlaumeier daher und schickt von einer Fake-instance Befehle

Außerdem würde ich
gerne vermeiden, daß bei jedem Befehl ein Parameter mehr mit übertragen werden muß.
Habe grad kein PB, aber soweit ich weiß ist
ProcedureDLL AttachProcess(Instance) eine Procedure die
automatisch beim laden der DLL aufgerufen wird, ohne das das program selber dazu etwas übertragen oder aufrufen muss.
aber laut Rings gehts ja auch mit 0, anstatt
instance als modulhandle

Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 11:40
von Mastermar
Danke, Rings!
jetzt bin ich dran mit testen, die Idee ist genau was ich suchte!
Christian Böttgenbach
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 16:10
von Mastermar
Ich habe es ausprobiert, Rings Beispiel funktioniert und liefert mit die Namen der aufrufenden Prozesse einwandfrei.
Ich dachte dann, wenn ich es mit getmodulehandle() versuche, könnte ich das handle des Prozesses auch
bekommen, aber das funktioniert nicht, ich erhalte immer nur denselben Wert
Also habe ich wohl etwas falsch gemacht?
Es entsteht nämlich hier das Problem, daß auch dasselbe Programm in mehreren instanzen die dll aufrufen könnte und daher der Name nicht eindeutig ist. Für die vorgesehene Anwendung ist das sogar recht wahrscheinlich.
Vielen Dank also und falls jemand noch eine Idee zur Verbesserung (Prozeßerkennung) hätte, gerne!
Mastermar
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 16:13
von Kaeru Gaman
dann lies dir Alex' post nochmal durch, das erklärt dir, warum die Lösung von Hexor dir schon helfen sollte.
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 16:21
von ts-soft
Wie HeX0r sagte, einfach reinpappen und gut. Hab mal ne kleine Änderung reingemacht:
Code: Alles auswählen
ProcedureDLL AttachProcess(Instance)
Global HostFileName.s
HostFileName = Space(#MAX_PATH)
GetModuleFileName_(Instance, @HostFileName, #MAX_PATH)
EndProcedure
Jetzt haste,
ohne Aufrufen irgendeiner Funktion, den Namen in der Variablen
HostFileName verfügbar.
Re: können dll´s das aufrufende programm erkennen?
Verfasst: 12.04.2010 16:30
von Kaeru Gaman
yo, jetzt bau ihm noch das GetModuleHandle mit rein, dann isser happy.
ich schätz mal, einfach zusätzlich
Code: Alles auswählen
Global HostHandle.i
HostHandle = GetModuleHandle_(Instance)
