Сведения о вопросе

Martincow

02:45, 8th August, 2020

Теги

delphi   com   typelib   com-hell    

Delphi и COM: TLB и вопросы технического обслуживания

Просмотров: 525   Ответов: 5

В компании, где я работаю, мы разрабатываем все GUI в C#,, но приложение kernel в основном разработано в Delphi 5 (по историческим причинам), с большим количеством компонентов, сделанных в COM+. В связи с этим очень специфическим видом применения a I два вопроса:

  • Опытные ребята в Delphi и / или COM, есть ли у вас какие-либо обходные пути для работы с багги TLB интерфейсом ? Некоторые из ошибок: IDE сбой во время выпуска большого TLB, потеря методов IDs, TLB повреждение и т.д. Здесь мы не нашли никакого хорошего решения. На самом деле мы пытались сделать обновление до новой версии 2007 года. Но новый интерфейс IDE TLB имеет те же ошибки, которые мы нашли раньше.

  • Как вы управляете версиями TLBs ? Файл TLB находится в двоичном формате, и разрешение конфликтов очень трудно сделать. Мы попытались сделать это, экспортируя описания интерфейсов в IDL и фиксируя в CVS, но мы не нашли никакого хорошего способа генерировать TLBs из IDL, используя Delphi. Кроме того, инструмент MIDL, предоставленный Microsoft, неправильно проанализировал файлы IDL, которые мы экспортировали из delphi.



  Сведения об ответе

lool

04:50, 25th August, 2020

Я думаю, вам стоит хорошенько взглянуть на Delphi 2009.

Delphi 2009 имеет изменения в поддержку COM, включая текстовую замену двоичных файлов TLB.

Вы можете прочитать больше в блоге Криса Бенсена .


  Сведения об ответе

P_S_S

11:44, 8th August, 2020

В далеком прошлом (до того, как я начал работать на CodeGear) я отказался от странного Delphi-изед IDL языка, который представлял IDE, и написал свой собственный IDL и скомпилировал его с помощью MS midl. Это в значительной степени сработало; единственный улов, IIRC, был уверен, что dispids (ID attribute) были правильными на интерфейсах автоматизации (dispinterfaces) для геттеров свойств & setters - был некоторый инвариант, который ожидал tlibimp, но midl не гарантировал.

Однако теперь, когда Delphi 2009 использует безопасное подмножество синтаксиса midl и включает компилятор для этого midl в поле и интегрирован в IDE, эти проблемы должны быть в прошлом.


  Сведения об ответе

lourence

17:12, 14th August, 2020

Мы также только что установили Delphi 2009 и, похоже, улучшили поддержку Typelibraries. Однако я довольно долго работал с библиотеками COM и типов, и вот мои общие готы, которые я нашел за эти годы. Я бы согласился, что он довольно глючный и находится на всем пути до Delphi 2006 (наша версия до использования 2009).

  • Всегда имейте каждый файл, который можно записать перед открытием. Это может показаться очевидным, но при работе с системой управления версиями иногда мы забываем это сделать и пытаемся удалить флаг readonly после открытия файла - Delphi не может справиться с этим. Убедитесь, что tlb доступен для записи перед открытием.
  • При редактировании отдельной библиотеки типов у вас MUST будет открыт проект. По какой-то причине, если вы откроете библиотеку типов самостоятельно, она не сохранится. Создайте пустой проект, а затем откройте библиотеку типов. По какой-то причине это позволяет сохранить библиотеку типов.
  • Если ваша библиотека типов используется приложением или COM+, убедитесь, что приложение закрыто или COM + отключено перед открытием библиотеки типов. Любые открытые приложения будут препятствовать сохранению библиотеки типов.

Однако я думаю, что ваше лучшее решение-это, вероятно, обновление. Вы также получаете поддержку Unicode.


  Сведения об ответе

SSESION

02:25, 9th August, 2020

Использование Delphi 2009 значительно уменьшило боль от огромных TLB файлов, и преобразование наших существующих объектов было безболезненным, но наши com объекты не используют никаких сторонних библиотек.

Мы будем переносить наши gui-приложения, как только поставщики библиотек выпустят поддерживаемые версии.


  Сведения об ответе

KOMP

00:43, 26th August, 2020

Тот же опыт с интерфейсом TLB здесь: мы просто перестали его использовать.

Мы работаем с несколькими отдельными файлами IDL (ручная сборка) для различных частей нашего фреймворка, используя конструкцию #include, чтобы включить их в IDL фактического приложения, а затем создать один tlb с помощью MIDL и tlibimp его. Если приложение не имеет собственного IDL, доступны предварительно скомпилированные версии различных файлов framework TLB.

Всякий раз, когда платформа вводит новую версию, запускается сценарий для повторного создания GUIDS на всех необходимых интерфейсах в файлах IDL.

Это хорошо послужило нам в течение многих лет, и для того, чтобы мы могли перейти на новый набор инструментов Delphi 2009 IDL/TLB, он должен быть не только интегрирован в IDE, но и универсален, когда речь заходит об автоматизированных сборках и тому подобном. Не могу дождаться, чтобы запачкать руки с помощью некоторых экспериментов!


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться