我正在修改使用COM引用的ASP.NET应用程序。代码通过以下方式创建对象的实例:
public static object COMCreateObject (string sProgID)
{
try
{
Type oType = Type.GetTypeFromProgID(sProgID);
if (oType != null)
{
return Activator.CreateInstance(oType);
}
else
{
throw new ApplicationException(
"Could not resolve ProgID for " + sProgID +
" (Ensure the component is registered properly)");
}
}
catch (Exception oExc)
{
PageInclude.ermHandleError(
"An error occured whilst creating " + sProgID +
" - " + oExc.ToString());
throw oExc;
}
}
GetTypeFromProgId返回一个有效的System._COMObject类型,但返回的三个属性(DeclaringMethod,GenericParameterAttributes和GenericParameterPosition)带有InvalidOperationException(“只能在Type.IsGenericParameter为true的Type上调用Method”。 )。
因此,调用Activator.CreateInstance(oType)也会失败(由于以下错误,从IClassFactory创建具有CLSID {508B4562-C89D-4DE9-4523-E6D507B3E3F2}的COM组件实例失败:800aeb29。)< / p>
我不确定COM组件的异常是否应该归咎于(它不是.NET组件,因此这些字段可能会丢失?)。
任何想法?