【发布时间】:2012-12-04 09:59:28
【问题描述】:
我有一个应用程序在应用程序生命周期内多次调用来自第三方 SDK 的函数。此第三方函数使用其 _3RDPARTY_ASSERT(它是 _ASSERT 的包装器)检查一些错误。
我的问题是,在其中一个调用中,我有时会期望出现错误(并在之后处理它)。我想在这种情况下禁用断言,因为它在调试时很烦人,但在所有其他情况下都保留它。
我尝试使用 pragma push_macro/pop_macro 来处理它,但我还没有找到方法。 这可能吗?
我有 3rdParty.cpp 的来源,但不想碰它。
这将是代码的简化版本:
mine.cpp:
#include "3rdparty.h"
HRESULT MyMethod(...)
{
HRESULT hr;
hr = _3rdParty(...);
if (SUCCEEDED(hr))
hr = _3rdParty(...);
if (SUCCEEDED(hr))
hr = _3rdParty(...);
...
if (SUCCEEDED(hr))
hr = _3rdParty(...); // This call shouldn't throw the assertion, as I expect it to fail sometimes!
if (FAILED(hr))
doSomething();
else
doSomethingElse();
...
if (SUCCEEDED(hr))
hr = _3rdParty(...);
return hr;
}
3rdParty.cpp:
...
#define _3RDPARTY_ASSERT (_ASSERT)
...
HRESULT _3rdParty(...)
{
HRESULT hr;
hr = SomeFunction();
_3RDPARTY_ASSERT(SUCCEEDED(hr));
return hr;
}
【问题讨论】:
-
@Jon:这不是重复的。这个问题是关于一般情况,有一个相对简单的解决方案,这是关于一个没有明显解决方案的具体情况。
-
你是对的,对不起。
-
关门了?人们不知道如何阅读了吗?