Как написать библиотеку классов для OLE-автоматизации?

У меня есть надстройка Excel, в которую я добавляю так много модулей классов, что она теперь очень громоздкая. Я хочу преобразовать его в библиотеку типов или пакет COM, чтобы я мог повторно использовать его для других приложений в пакете MS Office.

Я перенес надстройку в Visual Studio как проект библиотеки классов, но Excel Automation не распознает классы в скомпилированном DLL-файле. Интуитивно я думаю, что мне понадобится манифест, интерфейс или что-то подобное в моем коде.

Что мне нужно знать, чтобы предоставить методы и свойства класса для использования в OLE-автоматизации?


person Martin08    schedule 24.09.2008    source источник


Ответы (2)


Я предполагаю, что, поскольку вы использовали фразу «манифест», вы собираете эту 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.

Надеюсь, это поможет, Билл.

person Bill    schedule 24.09.2008

(Предполагая, что это проект .NET)

Помимо добавления Guids в ваши интерфейсы и классы, вам также необходимо пометить их атрибутом ComVisible (если только вы не пометили им всю сборку). Кроме того, вам необходимо использовать tlbexp.exe для экспорта метаданных в качестве библиотеки типов COM для ссылок в неуправляемых клиентах.

person Franci Penov    schedule 24.09.2008