Динамическое создание экземпляра COM-класса в .NET

Я могу загрузить COM-DLL, зарегистрированные на моем компьютере, следующим образом:

Type type = Type.GetTypeFromProgID("MYCOMDLL.ClassName");
object boxed = Activator.CreateInstance(type);

Затем я могу ковыряться в методах вызова и т. Д.

Как я могу добиться этого из файла DLL, который не зарегистрирован на моем компьютере?

Что-то вроде этого магического кода:

Type type = Type.GetTypeFromFile("MyFile.dll", "MYCOMDLL.ClassName");
object boxed = Activator.CreateInstance(type);

Это возможно?


person joshcomley    schedule 26.06.2009    source источник


Ответы (2)


Вы должны либо (а) сначала зарегистрировать DLL традиционным способом, либо (б) возиться с файлами манифеста COM без регистрации.

Это может помочь с (b) - http://msdn.microsoft.com/en-us/library/ms973913.aspx

person Christian Hayter    schedule 26.06.2009

Я нашел эту ссылку, которая может иметь то, что вы хотите:

Динамический вызов неуправляемой DLL из .NET (C #)

Похоже, вы могли бы обернуть вокруг него вспомогательный класс.

person João Marcus    schedule 26.06.2009
comment
Это работает для неуправляемых собственных DLL, но если это COM-библиотека, этого не произойдет. - person Kev; 26.06.2009
comment
Ой, ты прав. Я искал альтернативы, нашел способ загрузить библиотеку и получить все COM-объекты, но сама активация, похоже, требует регистрации DLL. - person João Marcus; 26.06.2009