ERLEDIGT
NEIN
NEIN
ANTWORTEN
20
20
ZUGRIFFE
791
791
EMPFEHLEN
-
21.06.10 01:29 #1T0day Tutorials.de Gastzugang
Moin,
Ich stehe momentan so ziehmlich am Anfang was DLLs betrifft und habe daher eine kleine Frage. In meiner test.exe habe ich eine Funktion zb
Wie rufe ich machZeug jetzt aus einer DLL heraus auf?Code :1
void machZeug(int ganzviel) { /* hier passiert was :) */ }
-
21.06.10 08:33 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Das geht nicht direkt. Man kann Funktionen einer DLL aus Anwendungen aufrufen, aber nicht umgekehrt.
Du könntest natürlich einen Zeiger auf diese Funktion an eine DLL Funktion übergeben und dann innerhalb der DLL Funktion die per Zeiger übergebene Funktion (zurück)aufrufen. (siehe Callback-Funktionen).
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
21.06.10 08:37 #3
Moin,
verstehe ich Dich richtig, Du willst aus einer DLL heraus Dein Testprogramm aufrufen

Das wird kaum gehen, denn eine (beliebige) DLL wird Dein Testprogramm kaum kennen - oder ist es eine selbstgeschriebene DLL
Normalerweise sind Libraries Sammlungen von Funktionen, die Du per include Deinem Testprogramm zur Verfügung stellen kannst - und somit nicht neu programmieren musst !!
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
21.06.10 14:28 #4T0day Tutorials.de Gastzugang
Nun ich habe ein Programm dessen Funktionen mir bekannt sind. Den Sourcecode des Programms habe ich allerdings nicht und kann daher keinen Zeiger übergeben.

Ich will jetzt eine mir bekannte Funktion innerhalb der Anwendung ausführen zB FuncA aus der DLL heraus aufrufen.
-
21.06.10 15:33 #5
Moin,
offengestanden verstehe ich noch immer nicht so ganz, was Du nun genau versucht ....
Willst Du innerhalb Deiner DLL sowas wie "TestProg::FuncA()" aufrufen oder doch eher im TestProg die "FuncA()" der DLL
Zeig' mal ein bisschen mehr Code (bitte mit den Code-Tags) - vlt. blickt man durch ....
Im übrigen gibt das, was deepthroat und ich zuvor schon schrieben ...
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
21.06.10 16:01 #6T0day Tutorials.de Gastzugang
Ich will aus der DLL die FuncA() der Anwendung aufrufen.
anwendung.exe
Jetzt will ich zB (von der DLL aus) FuncA(101); aufrufen und damit das Programm beendenCode :1 2 3 4 5 6 7 8 9 10 11
int FuncA(int zahl) { printf(%d,zahl); if(zahl > 100) exit(1); return zahl; } int main() { int zahl = 0; while(1) { Sleep(1000); FuncA(zahl++); }
etwa
Allerdings funktioniert das so ja nicht :/Code :1
Rufe_Anwendungsfunktionauf("FuncA",101);
Wie gesagt habe ich nur den Namen der Funktionen die ich gerne Aufrufen würde und nicht den Sourcecode. Daher kann ich ja keinen Zeiger einbauen der auf die Funktion zeigt.Du könntest natürlich einen Zeiger auf diese Funktion an eine DLL Funktion übergeben und dann innerhalb der DLL Funktion die per Zeiger übergebene Funktion (zurück)aufrufen. (siehe Callback-Funktionen).
-
21.06.10 16:07 #7
Moin,
mal theoretisch gesprochen: um in Deiner DLL eine Funktion einer anderen Source aufrufen zu können, würdest Du quasi ein API benötigten, sprich: Du müsstest von "anwendung.exe" eine Header-Datei mit den jeweiligen Signaturen der Funktionen haben, die Du in der DLL includen könntest ....
Aber wie wir hier schon geschrieben haben, kann so etwas nicht funktionieren .... und das für sind LIBs auch nicht gedacht
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
21.06.10 16:17 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Du möchtest also in einen laufenden Prozess eindringen und dann dort eine bestimmte Funktion aufrufen, was zur Beendigung des Programmes führt?
Oder bekommst du das Programm freiwillig dazu deine DLL (über einen Plugin-Mechanismus) zu laden?
Deine Vorgehensweise scheint mir doch irgendwie suspekt zu sein...
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
21.06.10 19:11 #9T0day Tutorials.de GastzugangNicht zur beendigung das war nur ein Beispiel... Die Funktionen sind unterschiedlichster Art...Du möchtest also in einen laufenden Prozess eindringen und dann dort eine bestimmte Funktion aufrufen, was zur Beendigung des Programmes führt?
Jop via Plugin Mechanismus.Oder bekommst du das Programm freiwillig dazu deine DLL (über einen Plugin-Mechanismus) zu laden?
-
21.06.10 19:22 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
22.06.10 00:14 #11T0day Tutorials.de Gastzugang
Leider nicht sonst würde das ja alles kein Problem darstellen. Die Plugin API beinhaltet nur Funktionen die für das Scripten geeignet sind. Ich kann über diese meine Funktionen zwar auch umleiten aber das würde natürlich die Performance drücken.
-
Nun ich kann mittlerweile auch nicht mehr ganz folgen, von daher:
Also du hast irgendein Programm (.exe), zu welchem du ein Plugin/Addon in Form einer DLL schreiben möchtest.
Dazu ruft dieses Programm exportierte Funktionen deiner DLL auf, und ebenso stellt es eigene Funktionen für die DLL zur Verfügung, und von genau diesen Funktionen möchtest du jetzt wissen wie du sie aufrufen kannst ?
Wenn ich das so richtig begriffen habe, dann:
Muss das Programm (die .exe) ebenfalls jene Funktionen exportieren (ansonsten kommst du nicht ohne Assemblerkenntnisse weiter).
Was dir nun 2 Möglichkeiten verschafft:
1. Du greifst von deiner DLL aus genauso darauf zu wie umgekehrt:
Code cpp:1 2 3 4 5 6
typedef void (*functypedef)(int); HMODULE hExe = GetModuleHandle(0); functypedef hFunc = (functypedef)GetProcAddress(hExe, "name_der_funktion"); hFunc(123);
2. Dir wurde eine .lib Datei mit in die Wiege gelegt (oder .def, dann kannst du mittels VS Command Prompt "lib /DEF:datei.def" eine .lib erstellen).
Diese musst du dann deinem Projekt hinzufügen, damit dagegen gelinkt wird, entweder in den Projekteinstellungen, oder mittels:
#pragma comment(lib, "datei.lib")
Mit den entsprechenden Prototypen der Funktion(en) kannst du sie dann ganz normal wie gewohnt aufrufen.
Sollte dies auch kein Stückchen weiterhelfen, schlage ich vor du zeigst uns genau, was und womit du Probleme hast (ich rede von Code / Programmnamen, und nicht von weiteren vagen Problembeschreibungen), damit wir dir helfen könnenGeändert von Slypy (22.06.10 um 01:57 Uhr)
-
22.06.10 16:56 #13T0day Tutorials.de GastzugangTut es aber nicht wie ich schon gesagt habe.Muss das Programm (die .exe) ebenfalls jene Funktionen exportieren (ansonsten kommst du nicht ohne Assemblerkenntnisse weiter).
Leider nicht sonst würde das ja alles kein Problem darstellen.Also gibt es eine Plugin-API. Die Funktionen die du aufrufen möchtest sind aber nicht Teil dieser API, oder wie?Jetzt möchte ich setzeVar(); aus meiner DLL heraus aufrufen.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
int iVar = 1; float teile(int a, int b) { return a / b; } int multipliziere(int a, int b) { return a * b; } void setzeVar(int a) { iVar = a; } int main(void) { while(1) { iVar = multipliziere(teile(223,3),iVar); Sleep(1000); } }
-
Ja dann wie gesagt, mir ist mit deinen Informationen kein anderer Weg bekannt als direkt über (inline)Assembler. Und natürlich muss du's erstmal schaffen, die Funktionen zu finden

Da du die ganze Zeit keine Programmnamen oder überhaupt du nicht registriert bist, vermute ich nicht gerade die besten Absichten deinerseits, und werde dich daher nicht mit Links versorgen ...
Deine ganze Fragestellung kommt mir wie ein Euphemismus für Cracken vor
Nach dem Motto "Hm wie komm ich möglicherweise, mit einer scheinbar harmlosen Problemstellung, an Informationen heran, die mir rote Hörner wachsen lassen"
MfG
-
Wenn man Funktionszeiger verwendet, kommt man auch ohne Assembler aus. Man muss nur die Signatur den Funktion (inkl. Aufrufkonvention) kennen.
Das allerdings auf jeden Fall. Solange das Programm von sich aus die Adresse dieser Funktion nicht zur Verfügung stellt, brauchen wir überhaupt nicht weiter zu diskutieren.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
Ähnliche Themen
-
In PHP eine JS-Funktion aufrufen
Von chuvak im Forum PHPAntworten: 6Letzter Beitrag: 26.04.08, 17:10 -
mit enter eine funktion aufrufen
Von CryingBaby im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 17.07.06, 15:25 -
In onEnterFrame eine Funktion aufrufen
Von Orphelina im Forum Flash PlattformAntworten: 16Letzter Beitrag: 21.11.05, 14:43 -
Nach confirm() eine PHP-Funktion aufrufen
Von Eistee im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 13.07.05, 02:12 -
[MX] Eine Funktion von aussen aufrufen
Von alma im Forum Flash PlattformAntworten: 13Letzter Beitrag: 24.08.03, 16:22





Zitieren

Login






