我的错误处理有问题...(使用VS2010Express)
我的代码如下所示:
#import "C:\Program\Delade filer\System\ado\msado15.dll" rename ("EOF","adoEOF") no_namespace
int main(int argc, char *argv[])
{
_ConnectionPtr pConnection;
_CommandPtr pCommand;
_ParameterPtr pParameter;
_RecordsetPtr pRecordset;
int iErrorCode;
HRESULT hr;
// Initialize COM
if(FAILED(hr = CoInitialize(NULL)))
{
goto done_err;
}
// more code here .....
// Uninitialize COM
CoUninitialize();
// Everything worked out, report an OK
iErrorCode = 0;
done:
return iErrorCode; ERROR!!
done_err:
// TODO: Cleanup
iErrorCode = (int)hr;
goto done;
在标有ERROR的行中,我得到一个运行时错误,调试器进入comip.h第782行。 我之前从未使用错误处理程序(ooops),上面的代码不是我写的。我知道最近发生了什么,但是我以前从未见过的“完成:”和“完成:”这些东西。如果有人能够解释我很快就会非常感激。
此致 Lumpi
答案 0 :(得分:3)
'That done: stuff'
是标签,goto
用于执行跳转,即在完全不同的标记位置继续执行程序在同一个功能中。因此,如果出现错误,则会在读取done_err:
的行的正下方继续执行 - 在执行错误报告后,它会跳转到done:
标签后面的常规返回点。
您无法阅读它,我无法阅读它。每个人都无法阅读它。所以:
同样的逻辑可以表达如下:
if(FAILED(hr = CoInitialize(NULL)))
{
// HandleError could display a messagebox or print to a log file ...
HandleError(hr);
return hr;
}
// do something meaningful
return 0;
关于你的崩溃 - 我们几乎无能为力。很可能你在某处造成了一些数据损坏(我的一个很好的猜测,我从未使用过这个ADO的东西:你正在泄漏连接句柄,即你在调用CoUnitialize之前没有释放它)。检查代码的其余部分是否存在任何缺陷,但首先要清除那些缺陷。