Article View: de.comp.lang.c++
Article #465Re: Einbinden von DLL-s?
From: 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.
Technical Details
Message-ID:
<5uSgQgf_KqB@p012.mbbs.imk.org>Path:
arc1-ca.pugleaf.net!mbbs.dinoco.de!EYCKReferences:
<43rg3v$19c@brachio.zrz.TU-Berlin.DE>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!mbbs.dinoco.de!EYCK From: EYCK@mbbs.dinoco.de Newsgroups: de.comp.lang.c++ Subject: Re: Einbinden von DLL-s? Date: 24 Sep 95 20:17:00 +0100 Message-ID: <5uSgQgf_KqB@p012.mbbs.imk.org> References: <43rg3v$19c@brachio.zrz.TU-Berlin.DE> X-Mailer: CrossPoint v3.02 R/A2701 - ZCFido v0.25a via [DOS/NCBMail V2.11c REL.:130595] X-Gateway: ZCONNECT UH mbbs.dinoco.de [UUCPfZ V5.60 U027] MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit