"константа" является ключевым словом, но Вы не можете использовать ее.
int const = 1; // "not a statement"
const int i = 1; // "illegal start of expression"
я предполагаю, что разработчики компилятора думали, что это могло бы использоваться в будущем, и они должны сохранить зарезервированным.
Классы ComVisible обычно должны иметь общедоступный конструктор по умолчанию. Его члены обычно также должны ссылаться только на типы ComVisible.
Вам не нужно указывать ComVisible (true) в классе, если вы указали его на уровне сборки.
Однако обычный способ создания сборки с классами ComVisible:
Указать ComVisible (false) на уровне сборки. Таким образом, только классы, которые явно помечены как ComVisible (true), доступны для COM.
Определите явный интерфейс ComVisible:
например,
[
ComVisible(true),
GuidAttribute("..."),
Description("...")
]
public interface IMyComVisibleType
{
// members...
}
например
[
ComVisible(true),
GuidAttribute("..."),
ClassInterface(ClassInterfaceType.None)
]
public sealed class MyComVisibleType : IMyComVisibleType
{
// implementation ...
}
Обратите внимание, что атрибуты Guid и Description не требуются, но полезны, чтобы дать вам больший контроль над генерацией COM.
Если вышеуказанное не помогает,
Есть еще кое-что, что нужно для истины.
ComVisible (true)
в тип непосредственно в дополнение к сборке Guid
Не уверен, что последние 2 строго необходимы, но я бы попробовал их.
Я думаю, вам нужна сборка со строгим именем. Подписываете ли вы свою сборку ключевым файлом?
Далее также попробуйте указать: [Guid ("{новый GUID}")] [ClassInterface (ClassInterfaceType.AutoDual)]
Я столкнулся с проблемой конструктора по умолчанию. Что меня обмануло, так это то, что файл библиотеки типов будет содержать ссылку на GUID класса, даже если этот класс не регистрируется. Быстрый способ увидеть, что будет зарегистрировано, - это создать файл реестра ('assembly.reg') следующим образом:
regasm assembly.dll /regfile:assembly.reg /codebase
Там хорошо обсуждается предоставление интерфейсов в COM Interop: свойства базового класса, не предоставляемые COM .