Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как заставить MicroStation грузануть мою dll-ку

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное
Предыдущая тема :: Следующая тема  
Автор Сообщение
Tonal



Зарегистрирован: 10.05.2007
Сообщения: 11

СообщениеДобавлено: Чт Фев 14, 2008 9:09 am    Заголовок сообщения: Как заставить MicroStation грузануть мою dll-ку Ответить с цитатой

Работаю с MicroStation как с сервером автоматизации из внешнего приложения.
Некоторые массовые операции получаються довольно долгими из за накладных расходов на передачу данных между процессами.

Идеальным решением было бы использовать что-то типа AddIn-ов эксела. Тогда можно было бы упихать логику таких операций в dll-ку, а извне только запросить её подгрузить и выполнить.

С первого взгляда ничего похожего не нашел. Есть ли возможность подобное устроить?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Чт Фев 14, 2008 1:33 pm    Заголовок сообщения: Ответить с цитатой

Я в подобных случаях пишу модуль на MDL, который делает всю "грязную" работу. А внешнему приложению только остается отдавать ему команды. Как такой вариант?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tonal



Зарегистрирован: 10.05.2007
Сообщения: 11

СообщениеДобавлено: Чт Фев 14, 2008 6:39 pm    Заголовок сообщения: Ответить с цитатой

Основное приложение пишется на python-е. На нём же можно создать и СОМ-овскую дллку. Т.е. сделать всё на одной платформе.

Если ничего другого не придумается придётся использовать MDL...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Фев 15, 2008 9:16 am    Заголовок сообщения: Ответить с цитатой

Комовскую DLL можно грузануть в микростейшеновском VBA.

Имхо: Но если необходимо быстродействие, то ничего лучше MDL нету, так как это "родные" модули для МС, которые пишутся на С. Как только начинаются всякие С++, COM, классы и прочая фигня, быстродействие куда-то начинает быстро исчезать Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tonal



Зарегистрирован: 10.05.2007
Сообщения: 11

СообщениеДобавлено: Пт Фев 15, 2008 3:06 pm    Заголовок сообщения: Ответить с цитатой

В плане быстродействия меня вполне устроит отыграть порядок - а это как раз вполне отыгрывается за счёт перевода логики из внешнего процесса в подгруженную длл-ку. Smile

Тут другая засада - в версии 8.5 поддержка COM реализована исключительно криво - стандартные утилиты от Microsoft сыпят горы ошибок при попытке скормить им файлы COM описаний (IDL).
Если в последних версиях так-же, то кроме MDL выхода действительно нет. Sad

А по поводу С++ - всё нормально там со скоростью, если руки прямые. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Фев 15, 2008 4:26 pm    Заголовок сообщения: Ответить с цитатой

Tonal писал(а):
Тут другая засада - в версии 8.5 поддержка COM реализована исключительно криво - стандартные утилиты от Microsoft сыпят горы ошибок при попытке скормить им файлы COM описаний (IDL).


А что за IDL файлы и что за утилиты? если не секрет конечно...

Tonal писал(а):
А по поводу С++ - всё нормально там со скоростью, если руки прямые. Smile


Прямота рук - дело великое Smile Но и она не спасает, когда скорость отработки критична... мы это уже проходили...
Не случайно еще со времен Юниксов С называют "высокоуровневый ассемблер", процедурный подход дает о себе знать...
В сишное приложение можно напихать вагон функциональности, и оно будет летать, когда приложение С++ уже себе этого позволить не сможет.

Впрочем, не хочу флудить, это все мое крайне личное ИМХО...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tonal



Зарегистрирован: 10.05.2007
Сообщения: 11

СообщениеДобавлено: Пт Фев 15, 2008 7:28 pm    Заголовок сообщения: Ответить с цитатой

[quote="Leonid"]
Tonal писал(а):
А что за IDL файлы и что за утилиты? если не секрет конечно...

Конечно не секрет - об этом в любом учебнике по COM-у написано.
IDL - язык описаний интерфейса (Interface Defenition Language).
Интерфейсы COM обычно описываются с помошью IDL. После чего файл скармливается утилитке midl, которая генерит бинарную библиотеку типов (TypeLib) и несколько *.h и *.c файлов.
После чего туда добавляют реализацию логики и получают COM компанент - dll или exe, который можно использовать из любого языка совместимого с COM.

Bentley умудрились создать такую библиотеку типов, что midl сыпет горой ошибок - т.к. они там нарушают некоторые пункты спецификации.
Извеняет их только то, что, если я не ошибаюсь это первая версия с поддержкой COM Automation

Leonid писал(а):
Tonal писал(а):
А по поводу С++ - всё нормально там со скоростью, если руки прямые. Smile

Прямота рук - дело великое Smile
...
В сишное приложение можно напихать вагон функциональности, и оно будет летать, когда приложение С++ уже себе этого позволить не сможет.

Я принимал довольно активное участие в разработке первой отечественной графической системы, которая хранила координатную информацию не в отдельнных файлах, а в базе данных, вместе с остальной информацией.
Скорость работы графической части была не хуже чем MicroStation.
Работала, начиная с 486х (главное чтоб винда запустилась).
Вся графика была написана на С++, за исключения небольшого модуля пересчёта координат - на асме.
От него не отказались с приходом Pentium-ов, только потому, что руки не доходили, да и работал он без проблем. Smile

Если я не ошибаюсь кое где до сих пор на нём работают.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group