|
|
|
Не работает COM-объект:разное объявление TSafeArray в модулях ActiveX разных версий Delphi
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть сторонняя COM-библиотека (на C#), в которой часть функций возвращает PSafeArray. Когда я компилирую проект в Delphi 2007, из массива достаются правильные данные. Когда компилирую в Delphi XE8 - в момент выполнения происходит ошибка Integer overflow . Пример кода считывания из PSafeArray Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Integer overflow возникает на строчке Код: pascal 1. . Т.е. не получается считать cElements. Пытаясь понять, в чем может быть дело, обнаружил, что TSafeArray имеет разное объявление в ActiveX.pas из Delphi 2007 и Winapi.ActiveX из Delphi XE8 (см. рисунок). Я добавил в XE-шный проект копию ActiveX.pas из Delphi 2007 и заменил Winapi.ActiveX в uses в модуле вызывающего кода и в _TLB.pas. XE-шный проект заработал. При нормальном выполнении в cElements значение меняется от 0 до, в моем случае, максимум 100. Изменение с unsigned-типа на signed-тип той же длины (4 байта) не должно ломать совместимость. Что ее ломает, я понять не могу. P.S. Так же обратил внимание (просматривая изменения WinDiff'ом), что изменились структуры tagVARIANT, tagPROPVARIANT, tagSTATSTG, но они вроде не используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2019, 12:55 |
|
||
|
Не работает COM-объект:разное объявление TSafeArray в модулях ActiveX разных версий Delphi
|
|||
|---|---|---|---|
|
#18+
nicholaosInteger overflow возникает на строчке Код: pascal 1. Так и должно быть. cElements = 0 Если cElements беззнаковое, то cElements - 1 = 4294967295. Это число не влазит в i: Integer Варианты решения 1) Код: pascal 1. 2. 3. 4. 5. 1) Код: pascal 1. 2. 3. 4. 5. 6. А вообще нужно смотреть на ворнинги компилятора. Он предупреждаетCombining signed and unsigned types - widened both operands ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2019, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=64&tid=2039128]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
5ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 346ms |

| 0 / 0 |
