Как использовать .Net-сборку в Delphi без регистрации в GAC или COM?

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

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

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

лучше, thalm

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

Большинство решений должны регистрировать как минимум одну dll/tlb для COM. Но наиболее многообещающая вещь, которую я нашел, была: Unmanaged Exports от Robert Giesecke, своего шаблона проекта Visual Studio, который позволяет писать статический С# (или что-то еще. Чистый язык) и вызовите их с любого неуправляемого языка, потрясающего:

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

ИЗМЕНИТЬ 2: Это действительно работает! Вы даже можете контролировать тип сортировки, невообразимый!!!

Ответ 1

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

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

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

Ответ 2

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