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