Как получить доступ к реализации COM-интерфейса с помощью .NET - клиента?
Написал COM-библиотеку на C#, которая реализует вывод сообщения в MessageBox.
ICom.cs:
namespace Adb.Com.Server
{
[Guid("1347e07e-5271-4abe-931f-894d3853fcb9")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ICom
{
}
}
IPrinter.cs:
namespace Adb.Com.Server
{
[Guid("fc5d2263-80a1-43b0-95b6-e8db03629e06")]
public interface IPrinter
{
void Print(string message);
}
}
Printer.cs:
namespace Adb.Com.Server
{
[Guid("1aed58c3-c90e-42cf-a7c5-77d64ae633d2")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(ICom))]
public class Printer : IPrinter
{
public Printer()
{
}
public void Print(string message)
{
MessageBox.Show($"Your message is {message}");
}
}
}
И AsseblyInfo.cs
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
// связанные со сборкой.
[assembly: AssemblyTitle("Adb.Com.Server")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Adb.Com.Server")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyKeyFile("ComExampleKeyFile.snk")]
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(true)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("1450b224-ff01-4c73-9a19-7487c48f2e48")]
// Сведения о версии сборки состоят из указанных ниже четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер сборки
// Редакция
//
// Можно задать все значения или принять номера сборки и редакции по умолчанию
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Зарегистрировал эту библиотеку с помощью regsvr32. И дальше возникает вопрос: могу ли я как-то получить доступ к реализации этого интерфейса через .NET - клиентское приложение (не подключая саму dll)? В COM совсем не силен.
Создал WinForms приложение. Делаю в проекте Ссылки -> Добавить ссылку -> COM (tab). Там вижу свой COM.
При попытке добавить этот COM-объект выводится ошибка:
Не удается добавить ссылку на "Adb_Com_Server". Библиотека типов ActiveX "path_to_lib" была экспортирована из сборки .NET и не может быть использована в качестве ссылки. Вместо этого необходимо добавить ссылку на сборку .NET
В общем, пока застрял на этом этапе
