可以自定义实现GetErrorDescription方法来解决这个问题。具体步骤如下:
1.继承IMsRdpClient10接口,重新实现GetErrorDescription方法。
2.在实现中根据不同的错误代码返回相应的错误描述。
3.在需要获取错误信息的时候,使用新的实现类的GetErrorDescription方法获取错误描述即可。
代码示例:
class MyRdpClient : public IMsRdpClient10
{
public:
HRESULT STDMETHODCALLTYPE GetErrorDescription(long disconnectReason, BSTR* pbstrDesc)
{
HRESULT hr = S_FALSE;
switch (disconnectReason)
{
case 0: *pbstrDesc = SysAllocString(L"No additional information is available."); break;
case 1: *pbstrDesc = SysAllocString(L"An internal error has occurred."); break;
case 2: *pbstrDesc = SysAllocString(L"A network error occurred."); break;
case 3: *pbstrDesc = SysAllocString(L"The user cancelled the connection."); break;
// 添加其他错误代码对应的描述信息
default: *pbstrDesc = SysAllocString(L"Unknown error."); break;
}
if (*pbstrDesc == NULL)
{
hr = E_OUTOFMEMORY;
}
else
{
hr = S_OK;
}
return hr;
}
// 其他IMsRdpClient10接口方法的实现
};
在需要获取错误信息的地方使用新的实现类的GetErrorDescription方法即可,例如:
MyRdpClient* pClient = new MyRdpClient();
// 连接远程桌面...
if (FAILED(hr))
{
BSTR desc;
pClient->GetErrorDescription(hr, &desc);
wprintf(L"Error: %s", desc);
}