Вызов c# dll из Delphi
Я составил .NET 3.5 dll с одним методом, который должен быть вызван Delphi .исполняемый. К сожалению, это не работает.
шаги: 1. Создайте dll C# 3.5 с кодом:
public class MyDllClass
{
public static int MyDllMethod(int i)
{
MessageBox.Show("The number is " + i.ToString());
}
}
- перейдите в свойства сборки --> сведения о сборке и проверьте "сделать сборку COM-видимой"
- Использовать RegAsm.exe для регистрации моей dll
это вызывает исключение Delphi, которое указывает, что он не может подключить dll. Какие шаги требуются чтобы включить использование управляемой dll C# из неуправляемого кода.
кто-нибудь знаком с хорошим примером о предмете?
спасибо
4 ответов
возможно, вам больше повезет пропустить COM-часть, используя my шаблон проекта для экспорта неуправляемого
class MyDllClass
{
[DllExport]
static int MyDllMethod(int i)
{
MessageBox.Show("The number is " + i.ToString());
return i + 2;
}
}
в Delphi вы импортируете его следующим образом:
function MyDllMethod(i : Integer) : Integer; stdcall; extern 'YourAssembly.dll';
мне пришлось проголосовать за ваш вопрос. Даже не заботясь о том, чтобы предоставить код, который будет компилироваться. (ваш метод C# не возвращает значение, но он ожидает как int)
после массового исследования я нашел решение: все дело в регистрационных параметрах. Флаг / кодовая база должны быть добавлены в команду regasm.
многие сообщения там предлагают использовать Guid и другие com-атрибуты на объекте c# Com exposed, мне удалось доставить функциональность COM, используя атрибут ComVisible(true) и команду regasm /tlb /codebse.
код:
[Guid("7DEE7A79-C1C6-41E0-9989-582D97E0D9F2")]
[ComVisible(true)]
public class ServicesTester
{
public ServicesTester()
{
}
//[ComVisible(true)]
public void TestMethod()
{
MessageBox.Show("You are in TestMEthod Function");
}
}
и как я уже упоминал, я использовал regasm.exe /tlb / кодовая база для регистрации это
одна вещь, которая может быть проблемой, если вы сделали свою сборку x64 или AnyCPU. Поскольку Delphi-32 бит (x86), вам нужно сделать свою сборку x86 или убедиться, что regasm.exe и регистрирует его в 32-битный реестр. Вы делаете это с помощью x86 версии regasm.исполняемый.
вы должны узнать больше об инструментах, которые вы используете. Вы пытаетесь соединить два совершенно разных мира (.Net, Delphi), используя еще одну (не слишком простую) технологию: COM. Ваш вопрос показывает совершенно ясно, что у вас нет хорошего понимания COM и, вероятно, нет .Сеть. Нет простого примера, который решает именно ваш вариант использования. Вы должны узнать COM, чем вы должны узнать, как сделать .Net-код доступным для COM, а затем вы должны научиться вызывать COM-объекты из Delphi. Что Это уже кратчайший путь. Никакие другие ярлыки не доступны!