DLL und Funktionszeiger
-
Hi,
habe ne DLL mit LoadLibrary(...) geladen und mit GetProcAddress(...) bekomme ich nen Zeiger auf die Funktion, welche die DLL exportiert.
zwei Fragen:
1. Warum muss ich immer erst ein einen Typ definieren
(z.B. typedef int (* p_fn1)(DWORD*, char*, char*, char*, char*);)
um der Funktion auch Parameter mitzugeben?2. ich versuche innerhalb der DLL dem DWORD* einen Wert zuzuweisen, leider ist im aufrufenden Programm der DWORD* trotzdem noch NULL. Warum?
Danke.
mfg BausO
-
Hi,
Zu 1.) Du musst nicht zwingend typedef bennutzen, folgendes ist auch möglich aber nicht gerade der guten Lesbarkeit dienlich:
int (* p_fn1)(DWORD*, char*, char*, char*, char*) = int ()(DWORD, char*, char*, char*, char*) GetProcAddress(....)Zu 2.) Folgendes Beispiel
void fn(DWORD *pa)
{
pa = NULL;
}a ist nur eine lokale Kopie des übergebenen Parameters, d.h. nur gültig im Funktionsrumpf, du kannst allerdings mit z.B. *pa = 0 den Wert der Variable auf die pa zeigt verändern. Willst du einen Zeiger dauerhaft verändern wäre dies denkbar:
void fn(DWORD **ppa)
{
*ppa = NULL;
}Hoffe dies hilft dir etwas weiter
MFG
-
Huch, Kleiner Fehler es muss so heissen:
int (* p_fn1)(DWORD*, char*, char*, char*, char*) = (int ()(DWORD, char*, char*, char*, char*)) GetProcAddress(....)