我的Visual C++实现的COM服务器使用了很多其他C++代码。那些C++代码有时会用__try
-__except
将代码包装起来,并将结构化异常转换为自定义的C++异常。我无法更改这一部分。
我的COM服务器的任何方法都不应该让这些异常传播到COM边界,因此它必须捕获并将它们转换为HRESULT
。那些自定义的C++异常包含了在翻译过程中获得的原始错误代码 - 它像 EXCEPTION_ACCESS_VIOLATION
这样。问题是如何制定一个适当的HRESULT
值,以便客户端尽可能地了解发生了什么(并且可以在看到访问冲突后决定重新启动服务器(和inproc的情况下重新启动自己))。
假设它是WinBase.h
中定义的EXCEPTION_ACCESS_VIOLATION
。
#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
后者在WinNT.h
中被定义。
#define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005L)
如果它最初是Win32错误,那么我可以使用HRESULT_FROM_WIN32()
将该代码转换为HRESULT
。
我是否应在此处使用HRESULT_FROM_WIN32()
,还是使用其他方式进行翻译?
IErrorInfo
,我仍然需要负责构建HRESULT
值。 - sharptoothHRESULT_FROM_NT()
对于这个值更合适,不是吗?假设异常代码==NT状态代码,无论如何... - andlabs