... традиционно не принимает размер блока, а значит освободит именно тот блок, какой был выделен, ни байтом больше. Другое дело, что функции SaMap и SaUnmap (а именно так я назвал функции в своих кирпичах , отвечающие за проецирование SAFEARRAY-массива на произвольный регион памяти) обычно принимают ...
Ну вот и прояснилась ситуация, надо теперь в старых проектах, где юзались SaMap и SaUnMap произвести реформу и внедрить сохранение и возвращение старого адреса. Спасибо Артуру, что поднял этот вопрос.
... и для чего мапится. Например была выделена память под некую структуру, затем к этому участку примапили массив и поработали с ним. Далее вызывается SaUnmap и массив отмонтируется от этого участка. Если это был фиксированный массив то его уничтожать не требуется, а значение адреса в SA можно просто ...
... интересно: Потому что я хочу сделать классный кирпич, в котором вместо SaMap — какая-нибудь функция с другим более понятным называнием, а вызывать SaUnmap (про вызов которого если забыть — будт утечка памяти) будет вообще не нужно, потому что SaUnmap будет вызываться автоматически при выходе из ...
А что тут не так? Место для локальной переменной выделится в стеке и при выходе из процедуры ничего освобождать не нужно, а раз так, то и SaUnmap не нужен.
И ещё вдогонку: нужно ли вообще SaUnmap для фиксированного массива? Смотря какого, если это локальная переменная, то она и без SaUnmap хорошо обойдется, а точнее SaUnmap там вообще никак не нужен ни для статического массива, не для динамического. ...
Ещё вопрос вдогонку: у тебя в SaUnmap вместо адреса и размера вписываются не предыдущие значения, а нули. Это не чревато тем, что память, выделенная при редиме, останется подвешенной? Как вообще массив уничтожается бейсиком при выходе из ...
... Description, 0, vbNullString Call ViewRest(Name, Description) End If 'Отмонтирование массива и освобождение памяти под структуру FUNCDESC Call SaUnmap(AryPtr(stFD)): oTypeInfo.ReleaseFuncDesc pstFD Next 'Отмонтирование массива и освобождение памяти под структуру TYPEATTR Call SaUnmap(AryPtr(stTA)): ...
Потому что я хочу сделать классный кирпич, в котором вместо SaMap — какая-нибудь функция с другим более понятным называнием, а вызывать SaUnmap (про вызов которого если забыть — будт утечка памяти) будет вообще не нужно, потому что SaUnmap будет вызываться автоматически при выходе из процедуры, ...
... в сях написать pointer[10] как аналог *(pointer + 10) Пример можно посмотреть в любом из моих последних кирпичей. Смотреть функции SaMap/SaUnmap например здесь . Возможность использовать UDT в качестве типа указателя — прилагается, и не требует объявления UDT в TLB в отличие от того же ...
... релизиацию Viper-а, поэтому просто надеюсь, что там именно то, о чём я говорю. Можешь так же в двух моих последних кирпичах поискать функции SaMap/SaUnmap, вот это точно то, о чём я говорю. ⋅ Указатели через ByRef-аргумент . Трюк хороший, но из-за необходимости часто сдвигать указатель, ...