Как написать библиотеку классов для OLE Automation? - PullRequest
0 голосов
/ 24 сентября 2008

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

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

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

Ответы [ 2 ]

1 голос
/ 25 сентября 2008

(при условии, что это проект .NET)

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

1 голос
/ 25 сентября 2008

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

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

...