Потреблять сборку .NET в Delphi XE2 - PullRequest
4 голосов
/ 03 ноября 2011

У меня часть бизнес-логики реализована в .NET, а другая в Delphi. Теперь я планирую перейти на Delphi XE2.

Есть ли у нас какие-либо условия для использования сборки .net из Delphi XE2?

Обновление: Я слышал о Платформе Hydra , которая позволяет нам интегрировать управляемый и неуправляемый код. Может кто-нибудь объяснить больше об этом с небольшим фрагментом демо / кода?

Обновление: Я пробовал несколько вещей в пробной версии этой Hydra Framework . Но для этого также необходимо изменить сборку .NET, чтобы создать интерфейс, чтобы мы могли сопоставить это с кодом Delphi.

Есть ли способ использовать сборку .NET без ее изменения?

Ответы [ 4 ]

4 голосов
/ 03 ноября 2011

Посмотрите на AToZed CrossTalk , он может использовать сборки .NET напрямую, без использования COM-взаимодействия.

1 голос
/ 03 ноября 2011

О XE2, единственно возможная новая функция должна быть 64-битной.

Но с точки зрения COM, может иметь значение реализация или вызов объекта COM в 32-битном или 64-битном режиме.битовый код.

Типы COM-объектов регистрируются через ключи реестра.Это то, что делает утилита regasm.exe (записывает в реестр).32-разрядные узлы реестра и явно отличаются от 64-разрядных узлов реестра.

Например, если ваш COM-объект скомпилирован как 32-разрядный, он должен быть зарегистрирован в 32-разрядном реестре или в 64-разрядном.битовый реестр (с помощью reagasm вызовов)

Но если вы будете использовать 32-битное приложение Delphi, у вас не возникнет никаких дополнительных проблем, если вы укажете обертку COM, которая будет экспортироваться как 32-битная.Короче говоря, XE2 ведет себя точно так же, как и любая предыдущая версия Delphi, при создании 32-разрядных процессов.

См. http://www.gfi.com/blog/32bit-object-64bit-environment для получения дополнительной информации.

Другое решение может состоять в запускеCOM-объект вне процесса : в этом случае разрядность не имеет значения, и у вас не должно возникать проблем с 32- или 64-разрядными.

Имейте в виду, что была очень досадная ошибка в XE2 : короче говоря, COM-доступ был прерван в некоторых случаях.Похоже, последнее «Обновление 2» решило проблему.

Конечно, если вы используете кроссплатформенные функции Delphi XE2, ваш COM-объект не будет доступен в Mac OSX.;)

1 голос
/ 03 ноября 2011

Nilesh, Я могу ответить на это только из предусловия Delphi 6 , поэтому имейте в виду, что Delphi XE2 может иметь более новые опции взаимодействия .NET.

Таким образом, для использования (вашей) функциональности сборки .NET из (вашего) приложения Delphi 6 проще всего изменить сборку .NET, чтобы она была видимой для COM, и просто использовать указанный интерфейс COM обычным способом в Delphi.

Из проекта .NET ; Извлеките необходимую функциональность в интерфейс (или интерфейсы), примените атрибут GUI к этим интерфейсам. В опциях проекта пометьте проект как «COM Visible» и перестройте. Вам нужно зарегистрировать сборку в COM (запустите regsvr из командной строки, если память не изменяет!)

Из Дельфи ; выполните импорт библиотеки типов, чтобы получить TLB из сборки DLL, затем просто CoCreate () с идентификатором GUID и использовать так же, как и любую другую библиотеку COM.

0 голосов
/ 04 ноября 2011

Вы можете сделать то, что называется неуправляемый экспорт .

Delphi Prism поддерживает его на языке, а C # / VB.NET - нет. Но есть шаблон проекта, который можно использовать, см. На сайте автора .

Неуправляемый экспорт - это метод, позволяющий использовать управляемый код с собственным кодом без взаимодействия с COM. У мистера Гизеке есть статья на эту тему .

...