Регистрация COM Interop

"константа" является ключевым словом, но Вы не можете использовать ее.

int const = 1;   // "not a statement"
const int i = 1; // "illegal start of expression"

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

6
задан Peter Mortensen 9 June 2014 в 15:59
поделиться

4 ответа

Классы ComVisible обычно должны иметь общедоступный конструктор по умолчанию. Его члены обычно также должны ссылаться только на типы ComVisible.

Вам не нужно указывать ComVisible (true) в классе, если вы указали его на уровне сборки.

Однако обычный способ создания сборки с классами ComVisible:

  • Указать ComVisible (false) на уровне сборки. Таким образом, только классы, которые явно помечены как ComVisible (true), доступны для COM.

  • Определите явный интерфейс ComVisible:

например,

[
ComVisible(true),
GuidAttribute("..."),
Description("...")
]
public interface IMyComVisibleType
{
        // members...
     }
  • Ваш класс ComVisible должен указывать ClassInterfaceType.None и реализовывать интерфейс ComVisible:

например

     [
     ComVisible(true),
     GuidAttribute("..."),
     ClassInterface(ClassInterfaceType.None)
     ]
     public sealed class MyComVisibleType : IMyComVisibleType
     {
        // implementation ...
     }

Обратите внимание, что атрибуты Guid и Description не требуются, но полезны, чтобы дать вам больший контроль над генерацией COM.

Если вышеуказанное не помогает,

15
ответ дан 8 December 2019 в 13:46
поделиться

Есть еще кое-что, что нужно для истины.

  • Убедитесь, что типы, которые вы хотите зарегистрировать, помечены как общедоступные.
  • Добавьте атрибут ComVisible (true) в тип непосредственно в дополнение к сборке
  • Добавьте атрибут Guid

Не уверен, что последние 2 строго необходимы, но я бы попробовал их.

0
ответ дан 8 December 2019 в 13:46
поделиться

Я думаю, вам нужна сборка со строгим именем. Подписываете ли вы свою сборку ключевым файлом?

Далее также попробуйте указать: [Guid ("{новый GUID}")] [ClassInterface (ClassInterfaceType.AutoDual)]

0
ответ дан 8 December 2019 в 13:46
поделиться

Я столкнулся с проблемой конструктора по умолчанию. Что меня обмануло, так это то, что файл библиотеки типов будет содержать ссылку на GUID класса, даже если этот класс не регистрируется. Быстрый способ увидеть, что будет зарегистрировано, - это создать файл реестра ('assembly.reg') следующим образом:

regasm assembly.dll /regfile:assembly.reg /codebase

Там хорошо обсуждается предоставление интерфейсов в COM Interop: свойства базового класса, не предоставляемые COM .

2
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

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