Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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, который делает всю "грязную" работу. А внешнему приложению только остается отдавать ему команды. Как такой вариант? |
|
Вернуться к началу |
|
|
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, классы и прочая фигня, быстродействие куда-то начинает быстро исчезать |
|
Вернуться к началу |
|
|
Tonal
Зарегистрирован: 10.05.2007 Сообщения: 11
|
Добавлено: Пт Фев 15, 2008 3:06 pm Заголовок сообщения: |
|
|
В плане быстродействия меня вполне устроит отыграть порядок - а это как раз вполне отыгрывается за счёт перевода логики из внешнего процесса в подгруженную длл-ку.
Тут другая засада - в версии 8.5 поддержка COM реализована исключительно криво - стандартные утилиты от Microsoft сыпят горы ошибок при попытке скормить им файлы COM описаний (IDL).
Если в последних версиях так-же, то кроме MDL выхода действительно нет.
А по поводу С++ - всё нормально там со скоростью, если руки прямые. |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пт Фев 15, 2008 4:26 pm Заголовок сообщения: |
|
|
Tonal писал(а): | Тут другая засада - в версии 8.5 поддержка COM реализована исключительно криво - стандартные утилиты от Microsoft сыпят горы ошибок при попытке скормить им файлы COM описаний (IDL). |
А что за IDL файлы и что за утилиты? если не секрет конечно...
Tonal писал(а): | А по поводу С++ - всё нормально там со скоростью, если руки прямые. |
Прямота рук - дело великое Но и она не спасает, когда скорость отработки критична... мы это уже проходили...
Не случайно еще со времен Юниксов С называют "высокоуровневый ассемблер", процедурный подход дает о себе знать...
В сишное приложение можно напихать вагон функциональности, и оно будет летать, когда приложение С++ уже себе этого позволить не сможет.
Впрочем, не хочу флудить, это все мое крайне личное ИМХО... |
|
Вернуться к началу |
|
|
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 писал(а): | А по поводу С++ - всё нормально там со скоростью, если руки прямые. |
Прямота рук - дело великое
...
В сишное приложение можно напихать вагон функциональности, и оно будет летать, когда приложение С++ уже себе этого позволить не сможет. |
Я принимал довольно активное участие в разработке первой отечественной графической системы, которая хранила координатную информацию не в отдельнных файлах, а в базе данных, вместе с остальной информацией.
Скорость работы графической части была не хуже чем MicroStation.
Работала, начиная с 486х (главное чтоб винда запустилась).
Вся графика была написана на С++, за исключения небольшого модуля пересчёта координат - на асме.
От него не отказались с приходом Pentium-ов, только потому, что руки не доходили, да и работал он без проблем.
Если я не ошибаюсь кое где до сих пор на нём работают. |
|
Вернуться к началу |
|
|
|