将DLL C++类库移植到Visual Studio的问题

neu*_*rte 6 c++ dll export visual-studio

我用C++编写了一个类库,并使用g ++作为共享对象在Linux中成功编译了它,然后创建了一些使用它的应用程序.现在我必须将它移植到VS2008.我给了所有类所需的__declspec(dllexport)前缀,然后尝试编译它.我得到一堆警告,基本上与以下有关:

  1. 我的自定义异常类,派生自std :: runtime_error,它产生:"警告C4275:非dll接口类'std :: runtime_error'用作dll接口类'cci :: FileOperationException'的基础".我怎么能让标准库类dll-exportable?
  2. 成员函数声明中的异常规范,导致"警告C4290:忽略C++异常规范,但指示函数不是__declspec(nothrow)".我读到某个地方,VS不支持这些,并且它确实在其他地方.多么令人困惑.

我读到人们说在DLL中导出类通常是一个坏主意,有无数的东西可能出错,现在我的头脑中充满了二进制不兼容,dll地狱,编译器版本不匹配等概念,以及说实话,我不能真正做出正面或反面.那么在Windows中创建共享类库的正确,安全和简便的方法是什么?

谢谢.

War*_*ung 1

我维护一个C++类库,通常在Windows上用作DLL,因此可以完成。关于您的问题:

  1. 在我的图书馆里不会发生这种情况。也许您需要使用 /MD 和 /MDd 构建选项?这样你的 C++ 运行时库也来自 DLL,这就是 VC++ 著名的挑剔之处。

  2. 不要使用投掷规格。 他们是邪恶的。如果您觉得无论如何都必须这样做,只需将类似的内容放入每个模块在使用 throw-specs 的代码之前都包含的头文件中即可。

#pragma 警告(禁用:4290)