... традиционно не принимает размер блока, а значит освободит именно тот блок, какой был выделен, ни байтом больше. Другое дело, что функции SaMap и SaUnmap (а именно так я назвал функции в своих кирпичах , отвечающие за проецирование SAFEARRAY-массива на произвольный регион памяти) обычно ...
В кирпиче есть и фиксированные, и динамический. К тому же, SaMap изначально нацелена прежде всего на динамические массивы (размер в параметре по умолчанию - максимально возможный) - эта тема же даже с вопроса по этому поводу начиналась. Бейсик не дал ...
Ну вот и прояснилась ситуация, надо теперь в старых проектах, где юзались SaMap и SaUnMap произвести реформу и внедрить сохранение и возвращение старого адреса. Спасибо Артуру, что поднял этот вопрос.
Насчет обнуления адреса - ждем Хакера. Да и в любом случае - непонятки только с SaUpmap, к SaMap как раз вопросов нет. А то, про что я говорю "работает" - это как с помощью переопределения функции избавиться от AryPtr, а заодно и от ppSa.
Проделал такой фокус: определил первый параметр SaMap ByRef as long , а потом переопределил её помощью кирпича на byref ary() as any Теперь в процедуру сразу приходит pSa и не нужно AryPtr Public Declare Sub SaMap Lib "*" _ (Ary() ...
... код, то увидишь, что у Хакера используются и динамические, и фиксированные массивы. Динамические - там, где нужно двигать указатель. Мало того, SaMap изначально содержит параметр, позволяющий задавать "размер массива" - как раз чтобы можно было сдвигать наш указатель на произвольную ...
И, судя по тому, что нот-нот возвращает таки не AryPtr, а адрес SA, то в SaMap/SaUpmap можно обойтись вообще без AryPtr и ppSa: передавать им сразу not(not(arrey)) (особенно учитывая, что нот-нот сразу компилируется в число) Вот блин, нельзя, увы. Для динамического ...
... если для большого количества массивов-указателей городить классы (а в них ещё вписать все необходимые проверки, которых принципиально нет в наших Samap/saupmap), то вообще смысл всем этим пользоваться теряется.
... & vbCrLf & _ Hex(Not (Not (t))) & " not(not)" И, судя по тому, что нот-нот возвращает таки не AryPtr, а адрес SA, то в SaMap/SaUpmap можно обойтись вообще без AryPtr и ppSa: передавать им сразу not(not(arrey)) (особенно учитывая, что нот-нот сразу компилируется в число)
... то зачем вообще размапливать уничтожаемую SA? И вот ещё что очень интересно: Потому что я хочу сделать классный кирпич, в котором вместо SaMap — какая-нибудь функция с другим более понятным называнием, а вызывать SaUnmap (про вызов которого если забыть — будт утечка памяти) будет вообще ...
... если массив динамический, ты ведь всё равно сам подменяешь размер, так что всё равно самому надо контролировать границы. Или я не так понял? Там у SaMap есть опциональный параметр, который означает границу. Для общего случая я туда поставил 0xFFFFFFFF — то есть преднамеренно очень большое значение, ...
... Set oTypeInfo = oObject.GetTypeInfo 'Получение указателя на структуру TYPEATTR и подмонтирование к ней массива pstTA = oTypeInfo.GetTypeAttr: Call SaMap(AryPtr(stTA), pstTA) 'Цикл по всем функциям и получение инфы о каждой For lIndex = 0 To stTA(0).cFuncs - 1 'Получение указателя на структуру FUNCDESC ...
Потому что я хочу сделать классный кирпич, в котором вместо SaMap — какая-нибудь функция с другим более понятным называнием, а вызывать SaUnmap (про вызов которого если забыть — будт утечка памяти) будет вообще не нужно, потому что SaUnmap будет вызываться ...
... я могу в сях написать pointer[10] как аналог *(pointer + 10) Пример можно посмотреть в любом из моих последних кирпичей. Смотреть функции SaMap/SaUnmap например здесь . Возможность использовать UDT в качестве типа указателя — прилагается, и не требует объявления UDT в TLB в отличие от ...
... релизиацию Viper-а, поэтому просто надеюсь, что там именно то, о чём я говорю. Можешь так же в двух моих последних кирпичах поискать функции SaMap/SaUnmap, вот это точно то, о чём я говорю. ⋅ Указатели через ByRef-аргумент . Трюк хороший, но из-за необходимости часто сдвигать указатель, ...