Как использовать сборку .Net в Delphi без регистрации в GAC или COM? - PullRequest
15 голосов
/ 10 января 2011

У меня есть простая задача:

можно ли написать Delphi DLL и поставить сборку .Net (только с одним интерфейсом с 4 методами и одним классом, реализующим интерфейс) и вызвать его изDelphi DLL?

Я имею в виду, могу ли я импортировать типы .Net непосредственно из сборки .Net (относительное имя файла), если я создаю tlb и модуль delphi для tlb, без регистрации Assembly / tlb?

best, thalm

EDIT (что я нашел):

Большинство решений должны зарегистрировать как минимум одну dll / tlb для COM.Но самое многообещающее, что я обнаружил, было: Неуправляемый экспорт от Роберта Гизеке, его шаблон проекта Visual Studio, который позволяет вам писать статические методы на C # (или на любом другом языке .Net) и вызывать их из любого неуправляемого языка, потрясающе:

class Test
{
    [DllExport("add", CallingConvention = CallingConvention.StdCall)]
    public static int Add(int left, int right)
    {
        return left + right;
    } 
}

РЕДАКТИРОВАТЬ 2: Это действительно работает!Вы даже можете контролировать тип сортировки, невероятно !!!

Ответы [ 2 ]

5 голосов
/ 10 января 2011

Один маленький совет: вам не нужно делать свой экспорт открытым.

Ваш класс уже является внутренним, поэтому он не будет отображаться при использовании из другой сборки.

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

0 голосов
/ 31 марта 2011

Вы можете сделать это, используя регистрацию Free COM. Смотрите мой ответ на вопрос по регистрации free com здесь . При сборке .NET вы должны сделать свои интерфейсы и методы COMVisible, как если бы вы собирались использовать объект с использованием зарегистрированного COM. Если вы затем последуете моему ответу на вопрос, который я только что упомянул, вы сможете поставить dll рядом. Единственное отличие состоит в том, что вам нужно поместить в манифест сборки (управляемый) информацию о экспортируемых классах COM. Если вы посмотрите документацию на сайте Microsoft, касающуюся манифестов приложения и сборки, вы должны узнать, как это сделать. Атрибут манифеста, который вы ищете: CLRClass . Если у вас все настроено правильно, вы просто помещаете управляемый dll рядом с вызывающим исполняемым файлом, и все работает.

...