有点奇怪的问题,可能与大多数人想做的事情相反,但我正在尝试解决遗留的 COM 问题。
我有两个组件,它们实际上都是 .NET 程序集,但由于历史原因,一个将另一个作为 COM 对象加载(该程序集是为 COM 互操作注册的)。它是一种插件体系结构,其中插件由其 COM ProgID 标识,因此这是我加载插件程序集时获得的唯一信息。
我尝试过的一种技术是:
var objType = Type.GetTypeFromProgID("My.ProgId");
var objLateBound = Activator.CreateInstance(objType);
IMyInterface netAssembly;
try
{
netAssembly = (IMyAssembly)objLateBound;
}
catch (Exception)
{
netAssembly = null;
}
如果转换为 .NET 接口成功,我知道我有一个 .NET 程序集并且可以通过该接口访问它。但是,该技术有点笨拙,我遇到了 COM 方面的问题,尤其是在 64 位系统上。如果可能的话,我宁愿不加载 COM 对象并直接将插件加载为 .NET 程序集。
但我必须继续说明的唯一信息是插件的 COM ProgID。
那么,如何在不创建任何 COM 对象的情况下从 COM ProgID 转到加载 .NET 程序集?