20.04.2004, 16:18 | #1 |
Участник
|
Как посмотреть свойства или методы COM-объектов?
Можно ли сделать такое? В отладчике Axapta или другими средствами.
В частности необъходимо узнать методы и парамеры Com объектов Excel, т.к. многих функций, которые есть в VB нет в COM'е. Спасибо. |
|
20.04.2004, 16:35 | #2 |
Участник
|
Есть очень удобная на мой взгляд вещь - мастер оболочек для COM объектов
|
|
21.04.2004, 09:09 | #3 |
Участник
|
Спасибо за совет.
Да, хорошая вещь, правда проблемы не решила: в классе Range есть функция, напимер IndentLevel, а при ее вызове Axapta ругается что такой функции нет! |
|
21.04.2004, 10:15 | #4 |
Участник
|
Не поленился, проверил - функция IndentLevel() нормально вызывается... Как аксапта то ругается?
|
|
21.04.2004, 10:30 | #5 |
Moderator
|
А свойства и методы обязательно смотеть средствами Аксапты ?
Вообще, вся информация о com объектах хранится в реестре Ок, оставим этот способ для экстремалов. Практически с любым средством разработки идет некий инструмент, позволяющий получить данную информацию: для MS Visual Studio - это OLE Viewer, в VB - это кажется называется Object Browser, Delphi - умеет генерить - tlb для любого com-объекта. Как правило, все эти средства позволяют получить гораздо больше информации о com-объекте, нежели из Аксапты. И еще небольшой совет - когда мне нужно написать что-то под Аксапту с использованием COM - я обычно сначала это делаю на одном из вышеописанных языках, а потом переношу работающее решение на X++. Может и тратится больше времени, зато в процессе разработки я получаю гораздо больший контроль над самой разработкой. |
|
21.04.2004, 11:15 | #6 |
Участник
|
То, что недоступны некоторые ф-ции - может быть глюк самого Excel, может версии. Действительно, Андре прав, проще сначала написать вызов на VB в самом Excel. Из Аксапты получать информацию о COM объектах сложно. Еще может быть засада, если разработка ведется на 3-х уровневой конфигурации. Компонента может быть зарегистрированна на клиенте, а вызываться на сервере...
|
|
21.04.2004, 11:18 | #7 |
Участник
|
Точно так и делаю - сначала записываю макрос, потом переношу код в Аксапту. но в 30% случаев выдаются ошибки о наличии таких функций у объекта.
|
|
21.04.2004, 11:30 | #8 |
Участник
|
Такое ощущение, что у Аксапты еще не отлажен механизм работы с COM-объетами - находится гдето на стадии бета-тестирования...
1 из 5 запусков вылетают ошибки о неправильных параметрах функций, хотя каждый раз они одни и те же. З.Ы. Может и правда Excel кривой стоит... |
|
21.04.2004, 11:31 | #9 |
Участник
|
Не все йогурты одинаково полезны! на самом деле если функция реализована в самом VB, не обязательно, что она работает через COM. Макроса будет недостаточно. Попробуй создать в VB именно COM объект выглядит примерно так: Код: Private Sub cmdGO_Click() Dim myObject As Object Dim strLine As String Set myObject = CreateObject("myObject .myClass", "192.168.0.1") strLine = "test" strLine = myObject .myFunction(strLine) MsgBox (strLine) End Sub |
|
21.04.2004, 11:40 | #10 |
Участник
|
да, и еще, если кто будет с СОМами биться, в аксапте есть глюк:
если в СОМе пресдусмотрен возврат переменных strLine1, strLine2, strLine3, myObject .myFunction(strLine1, strLine2, strLine3) то в аксапту они не попадут |
|
21.04.2004, 11:45 | #11 |
Участник
|
пробовал через ComVariant в параметрах ComVariantInOut::Out_retVal указать?
|
|