Vi писал(а):А для чего такое абсурдное описание и как ты себе представляешь массив void'ов?
Если объявлять массив void'ов, то это будет выглядеть так
[in] SAFEARRAY(void*)* ppSA и MkTypLib как раз такое описание вполне понимает, а
[in] SAFEARRAY(void) *ppSA это не массив void'ов, а массив любого типа. И если объявить массив void'ов, то он по сути бесполезен ибо VB такое не поддерживает, а вот массив любого типа это то, что в VB довольно часто применяется. Например нужно получить указатель на переменную, если переменная простая (не массив), то VarPtr и все готово, но если попробовать передать туда переменную массива, то будет жестокий облом, а вот если пере объявить туже самую функцию но используя
[in] SAFEARRAY(void) *ppSA , то туда можно будет передать массив и получить адрес этой переменной, а можно пере объявить в TLB знакомую всем GetMem4 (спасибо Хакеру, это его идея) так:
[entry("GetMem4")] HRESULT _stdcall ArrPtr([in] SAFEARRAY(void)* Array, [out, retval]long* rv);И можно сразу получить указатель на SafeArray.
Vi писал(а):Я понимаю, что для описания массива есть константа VT_VOID=24, позволяющая правильно описать такой массив в терминах TLB
Так это если массив содержится в переменной типа Variant, а в моем случае это обычная переменная - указатель на SafeArray.