|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Есть ли возможность как-то расширить интерфейс TWordApplication, а вернее, его _Document, от Офиса XP новыми функциями? Нужна одна, добавленная в Офисе 2007. Попробовал в лоб: Код: pascal 1. 2. 3. 4. 5. 6.
- AV Access violation at address 751902C2 in module 'RPCRT4.dll'. Write of address 0052A074. Описание этой функции скопировал с заголовочника для Офиса 2010 из D10.3, то есть он правильный. Гуглил, но ничего путного не нашлось. Может, есть какой-то трюк с получением интерфейса? В крайнем случае слямзю заголовочник для Офиса 2010 и буду таскать вместе с софтиной, но хотелось бы более нормального решения ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 17:04 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Можно попробовать Код: pascal 1.
А вообще вот, когда-то разбирался с Excel Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:30 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Может, есть какой-то трюк с получением интерфейса? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:32 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Есть ли возможность как-то расширить интерфейс TWordApplication, а вернее, его _Document, от Офиса XP новыми функциями? Нужна одна, добавленная в Офисе 2007. Тупо импортировать библиотеку типов - не помогает? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 22:30 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
_Vasilisk_> Перестать использовать интерфейсы и _Vasilisk_> использовать OleVariant и позднее связывание +много Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 09:21 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
istrebitel, у тебя, как я понял, через черный ящик OleVariant-а. С ним как раз особо проблем нет, вызывай что хочешь, а сервер либо обработает, либо вывалит ошибку. _Vasilisk_ Перестать использовать интерфейсы и использовать OleVariant и позднее связывание Можно, конечно, но удобняшек в виде методов и параметров жалко. Хотя оставлю как запасной вариант, т.к. кода довольно мало. ъъъъъ Тупо импортировать библиотеку типов - не помогает? Закинул заголовочник от ХЕ2 для офиса 2010, вроде проканало, но думал, вдруг есть более компактный вариант. Можно еще, конечно, в DocumentDisp добавить нужный метод, но это все равно будет модификация RTL, разве что надо будет таскать один модуль вместо трех. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 10:35 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-BrutalМожет, есть какой-то трюк с получением интерфейса? Fr0sT-Brutal ъъъъъ Тупо импортировать библиотеку типов - не помогает? Закинул заголовочник от ХЕ2 для офиса 2010, вроде проканало, но думал, вдруг есть более компактный вариант. Можно еще, конечно, в DocumentDisp добавить нужный метод, но это все равно будет модификация RTL, разве что надо будет таскать один модуль вместо трех. Fr0sT-Brutal, может ты и сам знаешь, но на всякий случай, есть процедура в Delphi "Импортировать библиотеку типов". Нужно, чтобы на ПК с Delphi стоял нужный Офис. В Delphi меню Component - Import Component - Import Type Library. Next - выбираем в списке зареганных в системе библиотек типов нужную. Дальше я обычно не ставил галку "Generate components wrappers", дальше Create unit, всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 11:12 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
s62 Fr0sT-Brutal, может ты и сам знаешь, но на всякий случай, есть процедура в Delphi "Импортировать библиотеку типов". Нужно, чтобы на ПК с Delphi стоял нужный Офис. В Delphi меню Component - Import Component - Import Type Library. Next - выбираем в списке зареганных в системе библиотек типов нужную. Дальше я обычно не ставил галку "Generate components wrappers", дальше Create unit, всё. Да, в теории знал, но сам не делал никогда. Тоже вариант, чтобы получить заголовочники от 2007, которого в средах не предоставляют. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 11:31 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
s62 Fr0sT-BrutalМожет, есть какой-то трюк с получением интерфейса? Fr0sT-Brutal пропущено... Закинул заголовочник от ХЕ2 для офиса 2010, вроде проканало, но думал, вдруг есть более компактный вариант. Можно еще, конечно, в DocumentDisp добавить нужный метод, но это все равно будет модификация RTL, разве что надо будет таскать один модуль вместо трех. Fr0sT-Brutal, может ты и сам знаешь, но на всякий случай, есть процедура в Delphi "Импортировать библиотеку типов". Нужно, чтобы на ПК с Delphi стоял нужный Офис. В Delphi меню Component - Import Component - Import Type Library. Next - выбираем в списке зареганных в системе библиотек типов нужную. Дальше я обычно не ставил галку "Generate components wrappers", дальше Create unit, всё. В старых дельфях не отображается список 64-разрядных COM - серверов, нужно отдельный инструмент из поставки Delphi использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 13:00 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Можно, конечно, но удобняшек в виде методов и параметров жалко. Мы используем как COM-объект одну (нашу) .Net сборку. Так вот вызов модуля обламывался на каждой новой версии .Net. При том, что сама сборка не менялась. Проблема оказалась в том, что в стандартные классы добавлялись новые методы и плыли все смещения. После перехода на позднее связывание все стало стабильно работать Fr0sT-Brutal Закинул заголовочник от ХЕ2 для офиса 2010, вроде проканало ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 13:24 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
_Vasilisk_ Таким образом вы жестко привязались к 2010 офису. Со старыми и новые версиями у вас большие шансы получить несовместимость у нас в конторе и филиалах зоопарк МС-офисов. только позднее связывание. иначе никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 13:33 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
_Vasilisk_ Таким образом вы жестко привязались к 2010 офису. Со старыми и новые версиями у вас большие шансы получить несовместимость Признаться, я не очень понимаю механизм работы вот этой обертки. Но у меня офис 2007, и обертка от 2010 сработала как надо. ГУИДы у интерфейсов от ХР и 2010 вроде совпадают. Где тогда разница, только параметры и новые методы? В плане офиса, как мне кажется, МС неплохо соблюдает совместимость и если что-то меняет - то либо новые методы, либо добавляет параметры в конец. Хотя, если в функции больше параметров, чем ожидает сервер, тут возможен косяк. Лучше все-таки брать версию интерфейса от минимально поддерживаемой. Но так и позднее связывание надо применять по версии АПИ от минимальной, разве что можно динамически варьировать варианты вызова. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 14:32 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal ГУИДы у интерфейсов от ХР и 2010 вроде совпадают. Fr0sT-Brutal В плане офиса, как мне кажется, МС неплохо соблюдает совместимость Fr0sT-Brutal совместимость и если что-то меняет - то либо новые методы, либо добавляет параметры в конец Fr0sT-Brutal Хотя, если в функции больше параметров, чем ожидает сервер, тут возможен косяк ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 14:47 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
свежий пример того как "МС неплохо соблюдает совместимость". в версиях до 2007 (включительно) для определения размера использованного региона в листе Excell применяли: Код: pascal 1. 2.
в новых версиях Activate вызывает отлуп. ибо тефаль, всегда думает о нас! © ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 15:36 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Мимопроходящий, то есть, они с 90-х и по 2007-й сохраняли странное поведение, и только потом его отключили? В этом претензия к плохой совместимости? И в 2022-м это свежий пример? То есть в 2020-м ещё было не так? Я бы ожидал, что UsedRange работает без всякого предварительного Activate. Надеюсь, стало именно так? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 22:41 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Ладно, всем спасибо за ответы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 19:16 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
_Vasilisk_ Замечательная совместимость! Тут добавили методов ( не факт, что в конец ), тут добавили параметров и все это выдали под старым интерфейсом. И где этот конец окажется при вызове stdcall ? Как я понял, изучая *Disp и всякие dispid, методы определяются по номеру. Пофиг, куда в новых версиях добавляют, пока старые номера не едут. Насчет параметров - а как через olevar это делается? Портянки вариантов для каждой версии, по типу "XP - 1 параметр и 10 EmptyParam, 2007 - - 1 параметр и 11 EmptyParam, 2010 - - 1 параметр и 15 EmptyParam"? А если меньше, то будет лучше? Почитал про safecall, там параметры освобождает вызываемый. Получается, любое несовпадение будет приводить к ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 13:47 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Насчет параметров - а как через olevar это делается? Портянки вариантов для каждой версии, по типу "XP - 1 параметр и 10 EmptyParam, 2007 - - 1 параметр и 11 EmptyParam, 2010 - - 1 параметр и 15 EmptyParam"? Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 14:34 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Как я понял, изучая *Disp и всякие dispid, методы определяются по номеру. Пофиг, куда в новых версиях добавляют, пока старые номера не едут. Fr0sT-Brutal Почитал про safecall Fr0sT-Brutal там параметры освобождает вызываемый ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 15:25 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Barmaley57 Все просто: Код: pascal 1.
Прикольно! :) немного VBA в дельфях. _Vasilisk_ Это не так важно как то, что вызываемая функция не знает сколько ей передали параметров Это как раз важно, потому что именно для чистки стека ей нужно знать аргументы. Если б не надо было - обратная совместимость по кол-ву аргументов была бы соблюдена. Всё, догнал. Это получается прямая совместимость была бы: старый сервер мог переваривать новые вызовы. А так все равно новый сервер ожидает аргумент, которого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 17:54 |
|
TWordApplication и новые функции
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal потому что именно для чистки стека ей нужно знать аргументы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 18:51 |
|
|
start [/forum/topic.php?fid=58&fpage=2&tid=2036645]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 396ms |
0 / 0 |