Thread View: de.comp.lang.c++
2 messages
2 total messages
Started by jedicghg
Thu, 21 Sep 1995 10:51
Einbinden von DLL-s?
Author: jedicghg
Date: Thu, 21 Sep 1995 10:51
Date: Thu, 21 Sep 1995 10:51
11 lines
857 bytes
857 bytes
Hallo, wie kann ich in meinem Programm mir unbekannte dll's einbinden, die natuerlich eine bekannte Schnittstelle bieten. Ich erkenne die DLL nur an der Endung, z.b. *.flt fuer eine Filter dll. Was fuer einen Filter die DLL darstellt kann man abfragen, doch wie kann ich dann mir unbekannte DLL's (z.B. von anderen Autoren gesschrieben) in meinem Programm automatisch einbinden und ansprechen? Danke fuer die Tips. Carsten
Re: Einbinden von DLL-s?
Author: EYCK
Date: Sun, 24 Sep 1995 19:17
Date: Sun, 24 Sep 1995 19:17
127 lines
4294 bytes
4294 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hallo Leute,
meinte am 21.09.95
zum Thema "Einbinden von DLL-s?":
j>wie kann ich in meinem Programm mir unbekannte dll's einbinden, die
j>natuerlich eine bekannte Schnittstelle bieten. Ich erkenne die DLL
j>nur an der Endung, z.b. *.flt fuer eine Filter dll. Was fuer einen
j>Filter die DLL darstellt kann man abfragen, doch wie kann ich dann
j>mir unbekannte DLL's (z.B. von anderen Autoren gesschrieben) in
j>meinem Programm automatisch einbinden und ansprechen?
Ich denke, Du meinst dass jetzt unter Windows? Wenn nicht, kannste
alles ueberlesen, was jetzt kommt... :-)
Zunaechst setze ich mal voraus, dass Du einen
Schnittstellenbeschreibung der von Dir zu benutzenden DLLs hast. Ohne
wird es wohl zeimlich schwierig werden, da man zB keine Ahnung ueber
die Parametresierung der Funktionen hat.
Dann gibt es prinzipiell 2 Moeglichkeiten:
Fuer die DLL steht eine sog. Import-Lib zur Verfuegung (*.LIB), die Du
einfach nur zu Deinem Programm dazulinken musst. Diese Lib sorgt beim
Starten des Programmes automatisch dafuer, dass die DLL nachgeladen
wird und die Funktionen zur Verfuegung stehen.
Andere Moeglichkeit: Du laedst die DLL explizit selber ueber
LoadLibrary(...) und ermittelst anhand der Funktionsnamen oder
Ordinalzahlen der Funktionen in der DLL die Einsprungpunkte in der DLL
(-> Funktionspointer). Ueber diese Pointer kannst Du dann die
Funktionen aufrufen. Nachher gibst Du die DLL mit FreeLibrary(...)
wieder frei.
Kleines Bsp. (gekuerzt) fuer die MAPI.DLL:
- -------------------- Zeile hier abknabbern --------------------
#include <windows.h>
[...]
///////////////////////////////////////////////////////////////////////////////
// Konstanten der Funktionsnamen aus der DLL
static const char *SZ_MAPILOGON = "MAPILogon";
static const char *SZ_MAPILOGOFF = "MAPILogoff";
[...]
///////////////////////////////////////////////////////////////////////////////
// Lokale Variablen
static HANDLE hMapiDLL = NULL; // Handle der MAPI.DLL
///////////////////////////////////////////////////////////////////////////////
// Funktionen, die die DLL zur Verf³gung stellt (³ber Zeiger)
// Castingtypen, damit GetProcAddress() nicht dauernd angemeckert wird (C++!)
typedef ULONG (FAR PASCAL *tMAPILogon)
(ULONG, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE);
typedef ULONG (FAR PASCAL *tMAPILogoff)
(LHANDLE, ULONG, FLAGS,ULONG);
[...]
tMAPILogon lpfnMAPILogon;
tMAPILogoff lpfnMAPILogoff;
[...]
///////////////////////////////////////////////////////////////////////////////
// Implementation
tMapiError FAR PASCAL InitMAPI(void)
{
if ((hMapiDLL = LoadLibrary(MAPIDLL)) < 32)
return(MAPIERR_LOAD_LIB);
if ((lpfnMAPILogon = (tMAPILogon)
GetProcAddress(hMapiDLL, SZ_MAPILOGON)) == NULL)
return(MAPIERR_LOAD_FUNC);
if ((lpfnMAPILogoff = (tMAPILogoff)
GetProcAddress(hMapiDLL, SZ_MAPILOGOFF)) == NULL)
return(MAPIERR_LOAD_FUNC);
[...]
return(MAPIERR_OK);
}
tMapiError FAR PASCAL DeInitMAPI(void)
{
lpfnMAPILogon = NULL;
lpfnMAPILogoff = NULL;
[...]
FreeLibrary(hMapiDLL);
hMapiDLL = NULL;
return(MAPIERR_OK);
}
- -------------------- Zeile hier abknabbern --------------------
-----BEGIN PGP SIGNATURE-----
Version: 2.6.2i
iQCVAwUBMGW82QR6oxcESAGtAQHvmwP/RcaFWOiFaH81ytVNu9Qbac+sJ9RSztJX
rjA23WM+eJ2hJIeJJ0oZxj7lCx4WZpsL0K2pCfCshY2wvmI05QNauUPk3NvlffFO
9q4oKl0rFxWWdB5SyZFJfCDI5/t9pvRCuSFjEx+mJJzp82gyuVJqGeHY6o9IqJ2Q
pR1HAB3pDjE=
=3c2b
-----END PGP SIGNATURE-----
Viele Gruesse
Eyck.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads