Excel_VBA_manual
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
4.3 Povezivanje <strong>Excel</strong>a sa C++ pomoću DLL-a<br />
Pomoću biblioteka za dinamiĉko povezivanje (DLL) omogućeno je uspostavljanje direktne veze<br />
izmeĊu programskog jezika C++ i <strong>Excel</strong>a.<br />
Prilikom kreiranja DLL-a potrebno je prije svega odabrati tip DLL-a koji se kreira. Zbog toga što<br />
Microsoft <strong>Excel</strong> treba pozivati taj DLL, potrebno je odabrati tip DLL-a koji podržava rad sa MFC<br />
(Microsoft Foundation Class). I regular DLL i extension DLL će se bez problema pozivati iz<br />
<strong>Excel</strong>a. Prednost u odabiru ipak je pripala extension DLL-u, jer prilikom njegovog kreiranja nije<br />
potrebno voditi raĉuna da li će se DLL statiĉki ili dinamiĉki povezivati sa MFC.<br />
Pomoću AppWizard(DLL) kreiran je MFC Extension DLL. AppWizard kreira osnovne datoteke, a<br />
meĊu njima i .CPP datoteku i .DEF datoteku.<br />
U .CPP datoteci nalazi se DllMain funkcija koja sadrži kod za inicijalizaciju i terminaciju DLL-a,<br />
tj. predstavlja ulaznu i izlaznu toĉku pri pozivu DLL-a. U toj datoteci takoĊer su smještene i sve<br />
ostale funkcije koje je potrebno da DLL obavlja. U ovom sluĉaju to su funkcije za sortiranje niza<br />
podataka i to sortpoljaV (sortira podatke od većih prema manjim) i sortpoljaM (sortira podatke od<br />
manjih prema većim).<br />
#include <br />
#include "stdafx.h"<br />
#include <br />
#include <br />
#ifdef _DEBUG<br />
#define new DEBUG_NEW<br />
#undef THIS_FILE<br />
static char THIS_FILE[] = __FILE__;<br />
#endif<br />
#define NMAX 400<br />
static AFX_EXTENSION_MODULE BbDLL = { NULL, NULL };<br />
extern "C" int APIENTRY<br />
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)<br />
{<br />
UNREFERENCED_PARAMETER(lpReserved);<br />
if (dwReason == DLL_PROCESS_ATTACH)<br />
{ TRACE0("BB.DLL Initializing!\n");<br />
// Extension DLL inicijalizacija<br />
if (!AfxInitExtensionModule(BbDLL, hInstance))<br />
return 0;<br />
new CDynLinkLibrary(BbDLL);<br />
}<br />
else if (dwReason == DLL_PROCESS_DETACH)<br />
{ TRACE0("BB.DLL Terminating!\n");<br />
53