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

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

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

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

19.08.2008 20:34:13
5 ОТВЕТОВ
РЕШЕНИЕ

Я думаю, что вы должны хорошо взглянуть на Delphi 2009.

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

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

10
19.11.2010 07:51:26

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

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

8
1.09.2008 21:36:52

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

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

Однако я думаю, что ваше лучшее решение, вероятно, является модернизацией. Вы также получаете поддержку Unicode.

5
13.09.2008 07:26:29

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

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

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

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

2
18.09.2008 20:54:33

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

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

3
18.09.2008 21:38:07