我试图在我的C#代码
中捕获Interop异常IEngine engine = null;
try
{
engine = engineLoader.GetEngineObject(AbbyySdkSerialNumber);
}
catch(System.Runtime.InteropServices.COMException ex)
{
int i = 0;
}
但它不想跳进catch块。有任何想法吗?提前谢谢!
答案 0 :(得分:3)
CLR自动将HRESULT从COM互操作映射到更具体的托管异常,不到 COMException 。例如,E_ACCESSDENIED变为 UnauthorizedAccessException ,E_OUTOFMEMORY变为 OutOfMemoryException ,依此类推。
如果HRESULT是自定义结果或CLR未知,则运行时会将通用 COMException 传递给客户端。 COMException 的ErrorCode属性包含HRESULT值。
有关COM互操作的完整讨论,请参阅Advanced COM Interoperability。
请注意,如果您在VS调试器下运行此命令,则默认执行将在导致异常的行上停止。除非你然后步入下一行,否则它不会跳转到catch块。
答案 1 :(得分:1)
如果肯定会抛出异常,那么我敢打赌它实际上并没有抛出你期望的异常类型,即System.Runtime.InteropServices.COMException
。我建议在catch (Exception ex)
添加try
子句,以便首先检查我的理智,然后检查 被抛出的异常。
答案 2 :(得分:0)
我有同样的例外。它告诉我项目ID是错误的 - 这应该是你在初始化期间插入对象的序列号。
建议: 如果您正在试用,那么请先检查一下,如果它没有过期。
我通过win服务运行SDK时发生异常。服务作为本地服务启动,但由于GetEngineObject无法创建引擎对象而无法正常工作。 我还尝试通过不同的用户名(进程)创建对象GetEngineObject,但它没有帮助。这就是为什么我考虑在我的visual studio中创建控制台应用程序的用户名差异,在那里我把我的代码放到它并在VS中以调试模式运行它的工作原理! (vs以我的用户名运行)
我不知道出了什么问题......