- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
处理错误的正确方法是什么?我的代码如下所示,处理我在 MSDN 上找到的所有错误代码,有时我仍然收到错误“未知”。
HRESULT hr = pwb->Navigate2(&URL, &Flag, &TargetFrameName, &PostData, &Headers);
if(FAILED(hr))
{
std::string message("Navigate2 failed with reason: ");
switch(hr)
{
// The operation was successful.
case S_OK:
message.append("S_OK");
break;
// One or more parameters are invalid.
case E_INVALIDARG:
message.append("E_INVALIDARG");
break;
// Out of memory.
case E_OUTOFMEMORY:
message.append("E_OUTOFMEMORY");
break;
// The operation failed.
case E_FAIL:
message.append("E_FAIL");
break;
case E_ACCESSDENIED:
message.append("E_ACCESSDENIED");
break;
case E_POINTER:
message.append("E_POINTER");
break;
case E_UNEXPECTED:
message.append("E_UNEXPECTED");
break;
default:
message.append("Unknown");
}
}
最佳答案
关于如何处理 COM 错误有很多变体。策略包括使用级联 if SUCCEEDED()
或使用 goto on FAILED()
等集中式函数错误处理。关于 MSDN 有一些很好的信息.
关于解释错误代码,FormatMessage()
通常会让您的工作更轻松 - 这是来自 MSDN 的示例(为清楚起见,包含在下面)
[来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms687061(v=vs.85).aspx]
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void ErrorDescription(HRESULT hr)
{
if(FACILITY_WINDOWS == HRESULT_FACILITY(hr))
hr = HRESULT_CODE(hr);
TCHAR* szErrMsg;
if(FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&szErrMsg, 0, NULL) != 0)
{
_tprintf(TEXT("%s"), szErrMsg);
LocalFree(szErrMsg);
} else
_tprintf( TEXT("[Could not find a description for error # %#x.]\n"), hr);
}
在上面的调用中,标志指示 Windows 将为错误消息分配内存(您必须释放内存 - 使用 LocalFree()
)并且它将在系统消息中查找错误消息表(FORMAT_MESSAGE_FROM_SYSTEM
)。有时(或通常取决于您使用的库类型)- 在系统消息表中找不到相应的错误描述。
在这些情况下,您可以自己处理错误描述(如您在示例中所做的那样)或尝试直接加载库的消息表。为此,请使用 FORMAT_MESSAGE_FROM_HMODULE
并将模块句柄作为 lpSource
参数提供给 FormatMessage()
函数。
这是一个例子:
std::wstring StackExample::getLastError( HRESULT hr )
{
LPWSTR lpMsgBuf;
DWORD ret;
std::wstring def(L"(UNKNOWN)");
ret = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_HMODULE,
GetModuleHandle(TEXT("imapi2.dll")),
hr,
0,
(LPWSTR) &lpMsgBuf,
0, NULL );
if(ret)
{
std::wstring last(lpMsgBuf);
LocalFree(lpMsgBuf);
return last;
}
return def;
}
关于c++ - IWebBrowser2::Navigate2 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956307/
我有一个获取所有 url 的代码,但我想进行更改以使鼠标模拟点击 iframe 窗口并输出它重定向到的 url。 这是我试过的代码。 #include // _variant_t #inclu
我使用 cwebpage_src代码,我需要在单击链接时更新一些 HTTP 请求 header 。据我所知,它可以通过 IHttpNegotiate->BeginTransaction 的 self
我有一个与 Windows 嵌入式浏览器和 COM 有关的问题。我想要做的是以 HTML 形式向用户显示一些数据,因此我使用 iwebbrowser2 控件来实现此目的。 在 ole32.dll 崩溃
我有一个带有 IWebBrowser2 的 MFC CDialog。我进入了一个包含 HTML 文本区域的页面,我可以输入文本,但退格键不会删除它。 最佳答案 当在 Internet Explorer
我需要等价物 window.open('打开的url','窗口名称','toolbar=no'); 在 C# 或 C++ 中 - 没有限制 感谢您的帮助 最佳答案 只需使用 IHTMLWindow2:
我是一名优秀的程序员,十分优秀!