一个奇怪的问题,可能向后从大多数人想做的事,但我试图解决一个传统的COM问题有点。
我有两个部件,这两个实际上是.NET组件,但由于历史的原因之一被装载其他作为COM对象(该组件被注册为COM互操作)。 这是一个插件架构,其中插件是由它的COM进程id识别,所以这是唯一的信息块,我得到加载插件组装。
一种技术我已经试过是:
var objType = Type.GetTypeFromProgID("My.ProgId");
var objLateBound = Activator.CreateInstance(objType);
IMyInterface netAssembly;
try
{
netAssembly = (IMyAssembly)objLateBound;
}
catch (Exception)
{
netAssembly = null;
}
如果转换到.NET接口成功,我知道我有一个.NET程序集,并可以通过接口来访问它。 然而,该技术是一个有点笨拙,我掌握的东西尤其是在64位系统中的COM方面的问题。 我宁愿只消除加载COM对象和直接,加载插件作为.NET程序集如果可能的话。
但我得去信息的唯一的一块是插件的COM进程id。
所以,我怎样才能从COM进程id去加载.NET程序集, 而不会产生任何COM对象 ?