
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
08.12.2008, 14:13
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
Здравствуйте! В процедуре имею указатель на Safearray 2-х мерного массива. Как с помощью этого указателя сделать ReDim массива, не зная тип массива? Сам делаю так (криво): Делаю клон массива Dim TmpArray () As ??? GetMem4 ppMoyArray, ppTmpArray Делаю ReDim TmpArray и уничтожаю клон. Но, не зная тип массива, вынужден в процедуру передавать тип и иметь пустые TmpArray для всех типов, которые предвидятся, что будут использованы в будущем. Хочется по универсальнее. Можно или нет получить массив, зная указатель на Safearray? (включая UDT). Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.12.2008, 16:04
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.12.2008, 16:58
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
Зри в корень, msdn: You can change only the least significant dimension of an array а у меня 2-х мерный массив ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.12.2008, 20:31
|
|||
|---|---|---|---|
Safearray и ReDim массива |
|||
|
#18+
Если это .NET, то вам в другой топик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.12.2008, 20:54
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
NET, это не .NET. Это VB6 + Api ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.12.2008, 17:31
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
Avtopicmsdn: You can change only the least significant dimension of an array а у меня 2-х мерный массивУ Redim Preserve поведение точно такое же (потому что используется SafeArrayRedim). Или не нужен Preserve? Вопрос такой - а указатель на SAFEARRAY откуда берётся, не искусственное ли это условие? К массивам, загнанным в вариант, Redim применим, и вполне просто: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.12.2008, 01:34
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
Preserve не нужен. Нужен Redim и первой и второй размерности, не зная тип массива, по указателю. Покорявшись в апи функциях удалось сделать для 1 и 2-х мерного массива любого типа (по-моему любого) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. остальные аргументы по названиям, легко понять, что из себя представляют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.12.2008, 13:17
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
Avtopic, вроде бы должно работать, раз в дескрипторе массива меняются только размерности. На правах мыслей вслух. Есть не совсем понятный момент:Описание SafeArrayDestroyDataThis function is typically used when freeing safearrays that contain elements with data types other than variants . ... Safe arrays of variant will have VariantClear called on each member ...Описание VariantClearIn certain cases, it may be preferable to clear a variant in code without calling VariantClear. ... You must call VariantClear if a VT_type is received but cannot be handled. Safearrays of variant will also have VariantClear called on each member. Using VariantClear in these cases ensures that code will continue to work if Automation adds new variant types in the future.Так почему "обычно используется ... другими, нежели вариант"? Нельзя использовать с элементами типа вариант? Вряд ли. VariantClear вызывается для каждого элемента, что ещё надо? Или здесь речь о потере производительности, которую можно избежать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.12.2008, 14:37
|
|||
|---|---|---|---|
|
|||
Safearray и ReDim массива |
|||
|
#18+
Зри в корень Описание SafeArrayDestroyDataThis function is typically used when freeing safearrays that contain elements with data types other than variants . ... Safe arrays of variant will have VariantClear called on each member ...Так почему "обычно используется ... другими, нежели вариант"? Нельзя использовать с элементами типа вариант? Вряд ли. VariantClear вызывается для каждого элемента, что ещё надо? Или здесь речь о потере производительности, которую можно избежать? Я это у них понял так (если не ошибаюсь): если только менять размерность и использовать SafeArrayAllocData, то останется в памяти мусор - старые данные, и поэтому ми сперва освобождаем память, используя SafeArrayDestroyData, не так ли, но: если массив элементов вариант, не сам массив вариант, а элементы являются указателями (назовем их 1) на указатели (назовем их 2), то SafeArrayDestroyData уничтожит указатели2 оставив их данные соответствующие им, в памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=60&mobile=1&tid=2161538]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 190ms |
| total: | 366ms |

| 0 / 0 |
