30.03.2017 Views

Excel_VBA_manual

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Deklaracija i poziv iz <strong>VBA</strong>:<br />

Declare Function ArgStruktura Lib "primjer" _<br />

(a As ARG, ByVal s As String) As Integer<br />

Sub ArgStrukturaTest( )<br />

Dim x As ARG<br />

MsgBox ArgStruktura (x, "abracadabra")<br />

MsgBox x.str & ":" &str&( x.i)<br />

End Sub<br />

'ispisuje string i dužinu<br />

2.3.4.6 Korištenje polja (array)<br />

OLE automatizacija osigurava poseban tip podataka polja koji se prenosi iz <strong>VBA</strong> u DLL. Ovaj tip<br />

podataka naziva se SAFEARRAY. Kada OLE automatizacija predaje SAFEARRAY u DLL, tada<br />

DLL prima pokazivaĉ na pokazivaĉ polja. Kao i BSTR pokazivaĉi, i SAFEARRAY pokazivaĉi<br />

mogu pokazivati na nulto polje, ako je polje alocirano, ali još nije dimenzionirano.<br />

Pomoću SAFEARRAY tipa podataka predaje se polje DLL-u, koji onda koristeći OLE funkcije<br />

za rad sa SAFEARRAY–om oĉita dimenziju polja, njegovu gornju i donju granicu, te elemente<br />

tog polja.<br />

Primjer funkcije SumaPolja koja je dio DLL-a i prima dva parametra. Prvi parametar je pokazivaĉ<br />

na SAFEARRAY, a drugi parametar je pokazivaĉ na long. Funkcija provjerava broj dimenzija<br />

polja, oĉitava gornju i donju granicu polja, te zbraja elemente polja:<br />

typedef SAFEARRAY * FPSAFEARRAY;<br />

short WINAPI SumaPolja(FPSAFEARRAY *ppsa, long *plResult)<br />

{ short Elem;<br />

long donjagr, gornjagr, l, rezultat;<br />

if (*ppsa == NULL)<br />

// polje još nije inicijalizirano<br />

return -4;<br />

if ((*ppsa)->cDims != 1) // provjeri broj dimenzija<br />

return -5;<br />

// očitavanje gornje i donje granice polja<br />

if (FAILED(SafeArrayGetLBound(*ppsa, 1, &donjagr)) ||<br />

FAILED(SafeArrayGetUBound(*ppsa, 1, &gornjagr)))<br />

return -1;<br />

//zbrajanje elemenata<br />

for (l =donjagr, rezultat = 0; l

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

Saved successfully!

Ooh no, something went wrong!