考虑这段代码:
try {
ISomeObject pObj(__uuidof(SomeClass));
ISomeObject pObj2(__uuidof(SomeOtherClass));
} catch ( _com_error& e ) {
// Log what failed
}
IE。我有一段代码可以实例化我的对象。
有时(错误的安装)它会失败,因为某些类没有正确注册。
(我没有特别的问题,只是在这里进行一般性讨论。)
是否有某种方法可以从捕获的异常或其他方式中了解哪个类失败了?
A 考虑过制作一个自己的包装器,它存储一个变量,例如gLastCreateAttemptUuid,但感觉很麻烦。
另外,假设 SomeClass 又尝试实例化其他未注册的东西。那么我们能找出根本问题吗?
CoCreateInstance() 调用者有责任提供有关其尝试实例化的内容的足够信息 - ATL 和 Native COM 支持都没有内置的功能。
您可以调用其 CreateInstance() 方法,而不是调用使用类 id 进行参数化的智能指针构造函数 - 它具有完全相同的参数集,但不会抛出异常。然后,您可以检查 HRESULT 并处理错误,并向错误处理程序提供您刚刚使用的类 ID。
但是,如果问题发生在您无法控制的代码中,它将对您没有帮助。极端情况下你可以使用过程监控器 http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx监视注册表查询并检测哪个类 ID 导致了问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)