【发布时间】:2011-05-25 19:44:21
【问题描述】:
我正在开发可供 C 或 C++ 应用程序使用的 C++ 组件 dll。 暴露出来的dll函数如下
#include <tchar.h>
#ifdef IMPORT
#define DLL __declspec(dllimport)
#else
#define DLL __declspec(dllexport)
#endif
extern "C" {
DLL bool __cdecl Init();
DLL bool __cdecl Foo(const TCHAR*);
DLL bool __cdecl Release();
}
这些函数的内部实现是未公开的 C++ 类,我假设使用这种样式的 dll 可以在 C 或 C++ 应用程序中使用。 问题是我不处理任何类型的 c++ 异常(即 bad_alloc),我把这些东西留给了调用者(更高层)。 在与我的同事多次辩论后,我应该捕获所有异常并返回错误代码或至少返回错误,因为在 C 应用程序的情况下它不能处理 C++ 异常?真的吗?我一般应该怎么做?如果您正在开发将被其他系统使用的组件,是否有处理异常的经验法则。
【问题讨论】:
-
不,C 中没有异常之类的东西。
-
C++ 可以通过
std::set_unexpected()注册一个 C-linkage /extern C函数作为未捕获异常的异常处理程序。如果知道它的损坏名称,您可以直接从普通 C 调用它。否则,您可以为其公开一个extern C包装器。并不是说这是一个方便的界面,但如果您的图书馆在其自身边界之外造成污染是绝对不可避免的...... -
@FrankH:这应该是一个答案,而不是评论。许多库(例如旧版 fortran 库)使用处理程序方法。
-
@DumbCoder:不要在实际代码中这样做。
标签: c++ c exception-handling