доступ к управляемому коду (CLR) с помощью Delphi 7 - PullRequest
4 голосов
/ 03 апреля 2010

Как delphi7 access C # .net управляет dll?

Я пытаюсь получить доступ к некоторым библиотекам DLL, скомпилированным в c #, и это не те библиотеки старого стиля. (У меня нет источника для этих DLL)

Я пытался искать в Интернете, но они сбивают с толку. я думаю, что есть некоторое ограничение, даже если получить доступ к нему с помощью D7 ..

спасибо.

Ответы [ 5 ]

5 голосов
/ 03 апреля 2010

@ AngryHacker, для того, что вы предложили, чтобы быть правдой, сборка .NET должна быть помечена с помощью ComVisibleAttribute (включена опция «Регистрация для взаимодействия COM»), и представить каждую функцию для COM с помощью [ComVisible (true)].

Если вы пытаетесь использовать стороннюю сборку (которую вы не написали), вам следует уточнить у поставщика, может ли эта сборка использоваться через COM.

Также сборка НЕ ​​должна иметь строгое имя, чтобы быть доступной через COM.

Если вы не хотите идти по COM, проверьте CrossTalk для Delphi: http://www.atozed.com/CrossTalk/Docs/index.EN.aspx

1 голос
/ 06 апреля 2010

Это совсем не сложно.Вы не должны «регазмировать» это, если не хотите.Вам даже не нужно ничего регистрировать COM-иш.

Лучше всего вам создать обертку на C # или другом управляемом языке.Ох, и убедитесь, что ваши классы ComVisible (правда).Этот поток переполнения стека довольно хорошо подводит итоги и содержит множество примеров для различных сценариев. Хостинг CLR в Delphi с / без JCL - пример

1 голос
/ 03 апреля 2010

Вы можете попробовать использовать трюк "Обратный P / Invoke" , как описано Брайан Лонг давным-давно.

Для этого трюка не нужен ComVisible (поэтому вы должны иметь возможность использовать его без изменения источников сборки .NET).

- Йерун

1 голос
/ 03 апреля 2010

Delphi7 обращается к управляемым DLL таким же образом, как и любой другой язык на основе COM (например, VB6).

Основная тренировка такова:

  1. Убедитесь, что ваш .NET имеет строгое имя.
  2. Пройдите через regasm
  3. Перетащите его в GAC

Теперь Delphi7 должен иметь возможность ссылаться на файл TLB, который был сгенерирован regasm, как и любая другая DLL на основе COM.

0 голосов
/ 05 апреля 2010

Если у вас нет возможности изменить источник исходной DLL, вы можете написать прокси в C # или Prism, который предоставляет com-интерфейс, который вы можете использовать в своем проекте. Преимущество этого подхода заключается в том, что вы можете адаптировать каждый вызов к использованию только определенных типов, которые вы можете легко обработать.

...