Как я создаю видимый класс COM в C#?

Я использующий  Visual Studio 2010 (.NET 4). Я должен создать COM-объект (в C#) и понятия не иметь, как начать (какой проект использовать, и т.д.)

48
задан DaveInCaz 21 January 2019 в 19:00
поделиться

2 ответа

Хорошо, я нашел решение и напишу его здесь для общего блага.

  1. Запустите VS2010 от имени администратора.
  2. Откройте проект библиотеки классов (например, MyProject).
  3. Добавить новый интерфейс в проект (см. Пример ниже).
  4. Добавьте с помощью System.Runtime.InteropServices; в файл
  5. Добавьте к интерфейсу атрибуты InterfaceType, Guid.
  6. Вы можете сгенерировать Guid с помощью Tools-> Generate GUID (вариант 4).
  7. Добавьте класс, реализующий интерфейс.
  8. Добавьте в интерфейс атрибуты ClassInterface, Guid, ProgId.
    Соглашение об идентификаторе ProgId: {namespace}. {Class}
  9. В папке «Свойства» проекта в файле AssemblyInfo установите для ComVisible значение true.
  10. В меню свойств проекта на вкладке сборки отметьте «Зарегистрироваться для COM-взаимодействия»
  11. Создайте проект

теперь вы можете использовать свой COM-объект, используя его ProgID.

пример: код C #:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Runtime.InteropServices;

namespace Launcher
{

    [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
    public interface ILauncher
    {
        void launch();
    }

    [ClassInterface(ClassInterfaceType.None), Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYY"), ProgId("Launcher.Launcher")]
    public class Launcher : ILauncher
    {
        private string path = null;

        public void launch()
        {
            Console.WriteLine("I launch scripts for a living.");

        }

    }
}

и сценарий VB с использованием COM:

set obj = createObject ("PSLauncher.PSLauncher") obj.launch ()

и результат будет:

Я запускаю скрипты, чтобы заработать себе на жизнь

70
ответ дан 26 November 2019 в 18:43
поделиться

Можно использовать проект библиотеки классов. Объявите тип с методами, которые будут предоставляться как COM-объект.

Убедитесь, что сборка стала COM-видимой:

alt text

И, наконец, зарегистрируйте ее с помощью regasm.exe:

regasm.exe /codebase mylib.dll

Теперь сборка предоставляется как COM-объект, и объявленный тип может использоваться любым клиентом, поддерживающим COM.

13
ответ дан 26 November 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: