Как написать библиотеку классов для OLE-автоматизации?
-
02-07-2019 - |
Вопрос
У меня есть надстройка Excel, в которую я добавляю так много модулей классов, что она стала очень громоздкой.Я хочу преобразовать его в библиотеку типов или пакет COM, чтобы можно было повторно использовать его для других приложений пакета MS Office.
Я перенес надстройку в Visual Studio как проект библиотеки классов, но автоматизация Excel не распознает классы в скомпилированном DLL-файле.Интуитивно я думаю, что мне понадобится манифест, интерфейс или что-то в этом роде в моем коде.
Что мне нужно знать, чтобы предоставить методы и свойства класса для использования в OLE-автоматизации?
Решение
Я предполагаю, что, поскольку вы использовали манифест фразы, вы собираете эту DLL, используя платформу разработки .net VS2003, VS2005 или VS2008 по сравнению с VS 6.0.
Этот связь предоставляет подробный набор шагов, необходимых для регистрации сборки .NET для использования в качестве COM-компонента.
Единственное, о чем я обычно не упоминаю в статье, — это создание собственных GUID.Используйте элемент «Создать GUID» в меню «Инструменты», затем вставьте их над классами, интерфейсами и перечислениями, которые вы хотите предоставить для COM.
[Guid("3838ADC1-E901-4003-BD0C-A889A7CF25A1")]
public interface IMyCOMClass {
void MyMethod();
}
[Guid("476BDEB6-B933-4ed5-8B86-7D9330A59356"),
ClassInterface(ClassInterfaceType.None)]
public class MyCOMClass : IMyCOMClass {
public void MyMethod() {
//implementation here
}
}
Второе, что я делаю, — это использую отдельный интерфейс для COM-части, реализуемый классом.Причина этого связана с возможностью взлома COM при изменении интерфейса, например, DLL Hell.
Надеюсь, это поможет, Билл.
Другие советы
(Предполагая, что это проект .NET)
Помимо добавления Guids в ваши интерфейсы и классы, вам также необходимо пометить их атрибутом ComVisible (если вы не пометили им всю сборку).Кроме того, вам необходимо использовать tlbexp.exe для экспорта метаданных в виде библиотеки типов COM для ссылок в неуправляемых клиентах.