30.03.2017 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!