Aus DLL eine Funktion der Anwendung aufrufen

T

T0day

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
Code:
void machZeug(int ganzviel) { /* hier passiert was :) */ }
Wie rufe ich machZeug jetzt aus einer DLL heraus auf?
 
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ß
 
Moin,

Wie rufe ich machZeug jetzt aus einer DLL heraus auf?

verstehe ich Dich richtig, Du willst aus einer DLL heraus Dein Testprogramm aufrufen :confused::confused:
Das wird kaum gehen, denn eine (beliebige) DLL wird Dein Testprogramm kaum kennen - oder ist es eine selbstgeschriebene DLL:confused:

Normalerweise sind Libraries Sammlungen von Funktionen, die Du per include Deinem Testprogramm zur Verfügung stellen kannst - und somit nicht neu programmieren musst !!

Gruß
Klaus
 
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.
 
Moin,

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.

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

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ß
Klaus
 
Ich will aus der DLL die FuncA() der Anwendung aufrufen.
anwendung.exe
Code:
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++);
}
Jetzt will ich zB (von der DLL aus) FuncA(101); aufrufen und damit das Programm beenden
etwa
Code:
Rufe_Anwendungsfunktionauf("FuncA",101);
Allerdings funktioniert das so ja nicht :/

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).
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.
 
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ß
Klaus
 
Ich will aus der DLL die FuncA() der Anwendung aufrufen.
anwendung.exe
Code:
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++);
}
Jetzt will ich zB (von der DLL aus) FuncA(101); aufrufen und damit das Programm beenden
etwa
Code:
Rufe_Anwendungsfunktionauf("FuncA",101);
Allerdings funktioniert das so ja nicht :/


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 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... :suspekt:

Gruß
 
Du möchtest also in einen laufenden Prozess eindringen und dann dort eine bestimmte Funktion aufrufen, was zur Beendigung des Programmes führt?
Nicht zur beendigung das war nur ein Beispiel... Die Funktionen sind unterschiedlichster Art...
Oder bekommst du das Programm freiwillig dazu deine DLL (über einen Plugin-Mechanismus) zu laden?
Jop via Plugin Mechanismus.
 
Zurück