gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:57 24 4
gpt4 key购买 nike

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

  1. 我的自定义异常类,派生自 std::runtime_error,它产生:“警告 C4275:非 dll 接口(interface)类‘std::runtime_error’用作 dll 接口(interface)类‘cci::FileOperationException’的基础”。我应该如何使标准库类 dll 可导出?
  2. 成员函数声明中的异常规范,导致“警告 C4290:C++ 异常规范被忽略,除了指示函数不是 __declspec(nothrow)”。我在某处读到 VS 不支持这些,而它在其他地方支持。多么令人困惑。

我读到有人说在 DLL 中导出类通常是一个坏主意,有无数的事情可能出错,现在我脑子里充满了二进制不兼容、dll hell 、编译器版本不匹配等概念,老实说,我真的搞不懂它的正反面。那么在 Windows 中创建共享类库的正确、安全和简单的方法是什么?

谢谢。

最佳答案

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

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

  2. 不要使用 throw-specs。 They are evil .如果您觉得无论如何都必须这样做,只需将类似的内容放入每个模块包含的头文件中,然后再使用 throw-specs 编写代码。

#pragma warning(disable: 4290)

关于c++ - 将 DLL C++ 类库移植到 Visual Studio 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com