|
|
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Добрый день! В процедуре работаю с COM-объктом, который возвращает мне OLEVariant-переменную (VarArray, но это не важно). Процедура отрабатывает полностью, до последней строчки. А далее вылетает исключение "Invalid variant operation" Код: pascal 1. 2. 3. 4. 5. 6. 7. и дебаггер останавливается здесь: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. вот содержимое переменной "V" Код: pascal 1. 2. причем такой константы для VType = 22 ($0016) нет Код: pascal 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. Решил попробовать принудительно выставить переменную в Unassigned. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Не помогает. Но самое интересное, если скомпилировать на другом компьютере, то помогло (везде Delphi 6, правда там Update Pack 1, а у меня Update Pack 2), Хелп! Есть идеи, что бы проверить/настроить/подкрутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 12:39 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Кроик СемёнЕсть идеи, что бы проверить/настроить/подкрутить? Разные ком-объекты (версии)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 12:43 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
wadmanРазные ком-объекты (версии)? Ком-объекты одной версии. Если скомпилирую на том компьютере и принесу EXE-шник на мой, то тоже нормально отрабатывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 12:48 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
$16 = vt_int и специальной очистки не требует. Посмотри что там вызывается до VarClearRare. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:08 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
сделал хак чтобы проверить предположение, что Delphi не может определить вариант-тип. Мало ли куда там дебаггер указывает, может неправильно :) Код: pascal 1. 2. Exception пропал, идем дальше. GunSmoker, спасибо, сейчас посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:18 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Вообще странная вешь: разные Variants.pas в Delphi моем и на том компьютере, у меня нет VarClearRare :) Я точку останова дебаггера показывал с того компьютера, у меня она не определяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:31 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Перенес Variants.pas с того компьютера на свой и положил в папку с проектом и всё отработало без Exception'a. Что теперь посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:39 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Кроик Семён> Процедура отрабатывает полностью, до последней строчки. А если переменная не локальная, а глобальная ? И что происходит, если вручную вызвать VarClear? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:40 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Кроик Семён> Что теперь посоветуете? Не скакать по версиям :) P.S. Еще в старых версиях варианты менялись почти в каждой версии - то функция из одного модуля в другой переедет, то ещё что. :-) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:42 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Чьи-то шаловливые ручки покопались в Delphi? Потому что VarClearRare в сырцах Delphi 6 вообще нет (я проверил). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:43 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамА если переменная не локальная, а глобальная ? "Invalid variant operation" вылетает тогда при завершении программы Гаджимурадов РустамИ что происходит, если вручную вызвать VarClear? вылетает то же самое исключение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:49 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
GunSmokerЧьи-то шаловливые ручки покопались в Delphi? Потому что VarClearRare в сырцах Delphi 6 вообще нет (я проверил). в Delphi 6 + Update Pack 1 есть в Delphi 6 + Update Pack 2 (у меня) снова нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:54 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Очень похожа на VarClearDeep из Variants.pas комментарии совпадают побуквенно Код: pascal 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 13:58 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:00 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Нету такого в Delphi 5. И это я тоже посмотрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:06 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Ключевое отличие: авторfinally let the OS attempt to deal with it ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:08 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Кроик Семён> в Delphi 6 + Update Pack 1 есть > в Delphi 6 + Update Pack 2 (у меня) снова нет Мне казалось, у тебя свежак, ХЕстопицот. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:27 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
P.S. В семёрке нет, хотя VarClearDeep содержит часть кода, да. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:30 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Вопросы Чем потенциально могут грозить эти два грязных варианта? 1) если оставить этот хак? //вместо vArr := Unassigned; TVarData(vArr).VType := varNull; 2) Если подменить Variants.pas на другую версию, и только для этого проекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:40 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Кроик СемёнЧем потенциально могут грозить эти два грязных варианта? 1) если оставить этот хак? //вместо vArr := Unassigned; TVarData(vArr).VType := varNullутечкой если внутри есть чему утечь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 14:48 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Так работает? Код: pascal 1. 2. 3. 4. 5. 6. Если да, то ищи где ты в Кроик Семён Код: pascal 1. портишь память ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 15:55 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, к сожалению, так тоже ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 16:45 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
Кроик Семёнк сожалению, так тоже ошибка.Если возвращаетсяКроик Семён Код: pascal 1. То ты никак не обработаешь это значение. Это неизвестный тип и неизвестно ни как с ним работать, ни как прочитать значение, ни как очистить. Это натуральный мусор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 16:51 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
но массив это тоже :) Все функции работы с массивами отлично работают VarIsArray VarArrayDimCount VarArrayLowBound VarArrayHighBound vArr[index,index] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 17:22 |
|
||
|
Как победить "Invalid variant operation" при обнулении переменной, полученной из COM-объек
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_То ты никак не обработаешь это значение. Это неизвестный тип и неизвестно ни как с ним работать, ни как прочитать значение, ни как очистить. Это натуральный мусор И именно поэтому: Код: pascal 1. 2. 3. 4. 5. 6. Остаётся вопрос, что за код у ТС (VarClearRare), и почему он не отправляет освобождение ОС. Возможно, это баг в Delphi 6, который был исправлен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39651802&tid=2040832]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 364ms |

| 0 / 0 |
