Kurze Frage zu DLL´s
-
Hallo wenn ich meine DLL über FARPROC aufrufe wie kann ich meiner Funktion aus der DLL dann Parameter übergeben? Oder geht das mit den Parametern nur wenn ich einen CALLBACK verwende also z.b. typedef int (CALLBACK* FUNC)(int,int);
#include <iostream> #include <windows> using namespace std; int main(int argc, char* argv[]) { HINSTANCE hDLL; FARPROC proc; hDLL = LoadLibrary("lib.dll"); if (hDLL != NULL) { proc = GetProcAddress(hDLL,"TextAusgabe"); if (!proc) { MessageBox(0,"DLL nicht gefunden !","DLL nicht gefunden !",0); FreeLibrary(hDLL); return 0; } else { proc(); } } return 0; }
-
Du musst die Signatur und dei Aufrufkonvention exakt kennen, dann baust Du am besten einen entsprechenden typedefund castest den Zeiger von GetProcAddress.
Dann verwendest Du den Zeiger wie einenormale Funktion mit Deinen Parametern.
-
1. FARPROC stammt aus 16-bit-Zeiten (Win3.xx) und ist veraltet. Vergesse 16-bit!
2. Mit LoadLibrary wird die DLL (sofern vorhanden) über die bereitzustellende Import-LIB geladen. Wozu noch GetProcAdress?
3. Man kann alle Funktionen - normal oder CALLBACK - in einer DLL bereitstellen.
4. Das die DLL einsetzende Programm muss natürlich die Funktionsprototypen kennen.
5. Eine DLL kann statisch (Linker) oder dynamisch (Programm) geladen werden.
6. Das Programm muss die exportierten Funktionen der DLL importieren. Sofern die IDE das nicht unterstützt, kann (DOS) IMPLIB eingesetzt werden.Wenn du Zugang zum Buch von Charles Petzold zur Windows-Programmierung mit WinApi32 hast, findest du dort alle erforderlichen Informationen.