^ Znam za tu temu ali to nije to, kod nas je zahtev da mora COM, ne bih sada da ulazim u razloge ali nije na meni da odlucujem nego da implementiram
@deerbeer, to smo i mi saznali, doduse na tezi nacin posle gomile experimentisanja, jbg. kad moje znanje o COM-u tezi nuli

Uglavnom, u IDL moze da se definise SAFEARRAY za te svrhe mada meni licno se to resenje ne svidja, jer posle deklaracije SAFEARRAY u IDL, MIDL generise header fajl sa definicijom
Code:
SAFEARRAY *p
Sto bi neko rekao da nije lose ali mi imamo slucajeve da imamo i
int** p tipove za koje bi recimo bio ekvivalent da napisemo u IDL kao
Code:
SAFEARRAY(SAFEARRA(int))
sto na kraju dobijemo u headeru
Code:
SAFEARRAY* p
tj. isto kada je u pitanju i jedan niz. (a da ne govorim da ima i nesto poput int**** p, mada ovo su mi i kolege iz C++ tima rekli da je lose resenje, jer zaista mislim da ovakve stvari treba izbegavati, ali to je off...)
Znaci problem je sto bi morali da znamo tacno sta drzimo u SAFEARRAY, tako da ode static type checking, znaci error prone, a da ne spominjem da koliko je kilavo raditi u C++ sa SAFEARRAY, mada ima COM wraperi poput CComSafeArray ali on radi sam sa onim VARIANT tipovima, ukoliko je tip VT_RECORD onda otpada koriscenje bilo koje wraper klase i ostaje samo glupi win32, mada video sam i neka resenja preko makroa, ali sve to je...
Uglavnom, verovatno bi neko rekao zasto koristimo SAFEARRAY, pa upravo zato sto preko njega bi navodno mogli da dobijemo "ispravan" tlb, sto bi na kraju rezultovalo da interop servis sam odradi marshaling, ali pored testova koje sam probao, sve govori da je to nemoguce, bar ne kada ima nesto poput SAFEARRAY(SAFEARRA(MyStruct)).
Doduse ceo ovaj "interoperability" mi je malo nejasan, pa me zato interesuje da li postoji nacin da se sve odradi preko idl (pogotovo mislim na UDT i nizove)a da na kraju interop automatski generise
ispravan marshaling.