我用 Visual C++ 实现的 COM 服务器使用了大量其他 C++ 代码。其他 C++ 代码有时会将代码包装在__try
-__except
并将结构化异常转换为自定义 C++ 异常。这部分我无法改变。
我的 COM 服务器的任何方法都不应该让这些异常通过 COM 边界传播,因此它必须捕获并将它们转换为HRESULT
s。那些自定义 C++ 异常包含在翻译过程中获得的原始错误代码 - 它类似于EXCEPTION_ACCESS_VIOLATION
. 问题是我如何制作一个适当的HRESULT
值,以便客户端尽可能多地了解发生的事情(并且可能在看到访问冲突后决定重新启动服务器(以及在 inproc 的情况下重新启动服务器))。
假设它是EXCEPTION_ACCESS_VIOLATION
在WinBase.h
#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
后者定义在WinNT.h
#define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005L)
我可以使用HRESULT_FROM_WIN32()
将该代码转换为首先HRESULT
假设它是Win32 错误。
我HRESULT_FROM_WIN32()
在这里使用还是使用任何其他方式进行翻译?