Article View: be.comp.programming
Article #8993Re: Win32 DLL's VC++
From: Christophe
Date: Sun, 02 Jun 2002 18:11
Date: Sun, 02 Jun 2002 18:11
86 lines
3169 bytes
3169 bytes
HIER:
Als voorbeeld kiezen we een eenvoudige toepassing: 2 getallen worden als
globale variabele doorgegeven, binnen de DLL worden ze afgedrukt en
vervolgens sturen we de som terug (als globale variabele) en drukken deze af
.
We zullen daarenboven binnen de DLL een functie uit het testprogramma
starten.
We beginnen met het testprogramma ( test.cc )
#include <iostream.h>
#include "dll.h"
extern int _test_g1, _test_g2, _test_resultaat;
void EXE_TestFunc(){
cout << "De testfunctie opgeroepen door de DLL testdll.dll\n";
}
main(){
DLL_AddSymbol("_EXE_TestFunc", (void *)EXE_TestFunc);
_test_g1 = 12;
_test_g2 = 34;
telsamen();
cout << "\nDe som van " << _test_g1 << " en "
<< _test_g2 << " = " << _test_resultaat << "\n";
}
We voegen er de volgende opmerkingen aan toe
1.. De eerste lijn van het hoofdprogramma registreert de functie
_EXE_TestFunc in de globale tabel, zodat de functie vanuit de DLL zou kunnen
aangeroepen worden.
2.. De variabelen worden als extern gedeclareerd, omdat ze in de DLL
feitelijk worden gedeclareerd.
We gebruiken de globale declaratie om gegevens uit te wisselen.
3.. De functie telsamen() wordt niet beschreven in het hoofdprogramma,
maar is de functie uit de DLL die we aanroepen.
4.. Je gebruikt de DLL.h die wordt meegeleverd, maar copieer het eerst in
de huidige directory.
De DLL functies opgenomen in testdll.c
#include "initdll.h"
int _test_g1, _test_g2, _test_resultaat;
extern void telsamen();
extern void dll_init_func();
extern void dll_uninit_func();
void telsamen(){
void(*testfn)();
printf("\n Goedendag, ik ben je DLL\n");
printf("\n we zullen nu %d en %d samentellen\n", _test_g1, _test_g2);
_test_resultaat = _test_g1 + _test_g2;
testfn = DLL_LookupSymbol("_EXE_TestFunc");
if (testfn)
testfn();
else
printf("EXE_TestFunc werd niet gevonden\n");
}
void (*foo)() = telsamen;
void dll_init_func(){
puts("Laden van de dll\n");
}
void (*dlf)() = dll_init_func;
void dll_deinit_func(){
puts("Uitladen van de dll\n");
}
Technical Details
Message-ID:
<hdtK8.10032$ud.703@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!supernews.com!news.infoave.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<yNsK8.5919$Q97.845184091@hestia.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,9c04e24bce4e27e3 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-06-02 11:11:32 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!supernews.com!news.infoave.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: "Christophe" <just.chillNOSPAM@pandora.be> Newsgroups: be.comp.programming References: <yNsK8.5919$Q97.845184091@hestia.telenet-ops.be> Subject: Re: Win32 DLL's VC++ Lines: 91 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-ID: <hdtK8.10032$ud.703@afrodite.telenet-ops.be> Date: Sun, 02 Jun 2002 18:11:25 GMT NNTP-Posting-Host: 213.118.46.205 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1023041485 213.118.46.205 (Sun, 02 Jun 2002 20:11:25 MET DST) NNTP-Posting-Date: Sun, 02 Jun 2002 20:11:25 MET DST Organization: Telenet Internet