Должно быть довольно просто получить доступ к базовой сборке .NET для COM - я никогда не пробовал шаблон проекта COM Class, так что в прошлом я справлялся с этим:
Создайте новую (стандартную версию) библиотеку классов .NET, используя C # или VB. Определите интерфейс COM (замените GUID на ваш собственный):
[ComVisible(true)]
[Guid("8999F93E-52F6-4E29-BA64-0ADC22A1FB11")]
public interface IComm
{
string GetMyGroups();
}
Теперь определите класс, который реализует этот интерфейс (снова замените GUID на ваш собственный):
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[GuidAttribute("C5C5A1A8-9BFB-4CE5-B42C-4E6688F6840B")]
[ProgId("Test.Comm.1")]
public class Comm : IComm
{
public string GetMyGroups()
{
var comm = new CommunicatorAPI.MessengerClass();
var groups = comm.MyGroups as IMessengerGroups;
return string.Join(", ", groups.OfType<IMessengerGroup>().Select(g => g.Name).ToArray());
}
}
Атрибут Prog ID в этом классе - это то, что вы будете использовать для создания экземпляра вашего компонента из ASP.
Строго назовите сборку (Свойства проекта -> вкладка «Подписывание» -> «Подписать сборку» -> Создать новый файл ключа строгого имени с помощью раскрывающегося списка)
Теперь, соберите сборку и зарегистрируйтесь, используя Regasm - если вы не хотите регистрироваться в GAC (что я бы порекомендовал, поскольку GACing не упрощает развертывание), обязательно используйте параметр -Codebase (он просто добавляет запись reg, которая сообщает клиентам, где найти сборку) - например:
regasm ClassLibrary2.dll /codebase "S:\Testing\ClassLibrary2\ClassLibrary2\bin\Debug\ClassLibrary2.dll"
Теперь вы должны иметь возможность создавать экземпляр компонента и вызывать методы для него - например (в javascript):
var a = new ActiveXObject("Test.Comm.1");
alert(a.GetMyGroups());
Когда дело доходит до развертывания, важной работой, которую выполняют Regasm и Regsvr32, является запись различных настроек в реестр, чтобы клиенты могли найти компонент COM (на основе идентификатора программы или идентификатора класса COM). Все, что вам нужно сделать, это выяснить, какие настройки COM записываются при запуске Regasm на локальном компьютере, и записать их в реестр на сервере. Вы можете использовать ProcMon для отслеживания того, что записывается в реестр при запуске Regasm.
Вообще говоря, вы можете ожидать увидеть что-то подобное в реестре:
[HKEY_CLASSES_ROOT\Test.Comm.1]
@="ClassLibrary2.Comm"
[HKEY_CLASSES_ROOT\Test.Comm.1\CLSID]
@="{00585504-90C8-4760-A359-67CAF08FFED1}"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}]
@="ClassLibrary2.Comm"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\Implemented Categories]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="ClassLibrary2.Comm"
"Assembly"="ClassLibrary2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf55d4e60653257a"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///S:/Testing/ClassLibrary2/ClassLibrary2/bin/Debug/ClassLibrary2.DLL"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\InprocServer32\1.0.0.0]
"Class"="ClassLibrary2.Comm"
"Assembly"="ClassLibrary2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf55d4e60653257a"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///S:/Testing/ClassLibrary2/ClassLibrary2/bin/Debug/ClassLibrary2.DLL"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\ProgId]
@="Test.Comm.1"
Надеюсь, это поможет:)