我有一台COM服务器。如果我以这样的动态样式调用它的方法,如果另一方面出现问题,我会得到完整的异常
try
{
Type factoryType = Type.GetTypeFromProgID("VPI.TcHost.TcAppFactory");
dynamic factory = Activator.CreateInstance(factoryType);
dynamic appl = factory.CreateTcApp("Nga", "8.7");
}
catch (COMException ex)
{
//Here i get nice exception with _FULL_ description message
}
当我创建InteropAssembly并像这样调用它的方法时,如果另一方面出现问题,我会得到一个简短的异常包装器
try
{
CTcAppFactory appFactory = new CTcAppFactory();
CNgaApp mApp = appFactory.CreateTcApp("Nga", "8.7");
}
catch (COMException ex)
{
//Here i get short exception with hex code without Error string that was sent
//from COM server
}
这就是异常短暂的样子。 (它不包含我的COM服务器发送的问题的描述)
如何在强类型代码变体中获得完整异常?
答案 0 :(得分:2)
DISP_E_EXCEPTION是一个COM错误,通常仅在您使用COM服务器后期生成时生成。就像你在第一个片段中所做的那样。奇怪的是,它出现在早期版本中,但技术上可行,如果COM服务器本身在其他类型的COM服务器上使用后期绑定并且只是传递错误代码。然而,CLR互操作层现在不会轻易从IDispatch :: Invoke()获取EXCEPINFO。除非COM服务器正确实现IErrorInfo,否则它似乎没有。
你可以做的不多,作者显然似乎只支持后期约束。联系他寻求支持或者回到后期。