gpt4 book ai didi

c++ - 如何声明库和应用程序之间共享的类

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:21 24 4
gpt4 key购买 nike

我有一个在两个项目(一个桌面应用程序项目和一个库项目 (dll))之间共享的公共(public)实用程序类。我在 VS2013 下工作。

为了让这个类在编译为我的库的一部分时可供外部调用,我使用了这样的宏:

#include "global.h"

class MYCLASS_EXPORT UtilityClass {

public:
...

我的 global.h 文件包含以下内容:

#ifdef MYCLASS_LIBRARY
# define MYCLASS_EXPORT __declspec(dllexport)
#else
# define MYCLASS_EXPORT __declspec(dllimport)
#endif

因此,当我在我的库中使用该类时,我设置了预处理器宏 MYCLASS_LIBRARY,并且链接我的库的应用程序可以使用 UtilityClass。

相反,当我将该类用作我的 C++ 桌面应用程序项目(没有预处理器宏 MYCLASS_LIBRARY)的一部分时,由于 MYCLASS_EXPORT 声明,我从编译器收到“不一致的 dll 链接”错误。

那么,如何声明我的类以便可以在库项目和桌面应用程序项目中使用(因此无需导出该类)?

为了更清楚起见,我找到了以下可行的解决方案:

#ifdef MYCLASS_LIBRARY
#include "global.h"
#endif

#ifdef MYCLASS_LIBRARY
class MYCLASS_EXPORT UtilityClass {
#else
class UtilityClass {
#endif

public:
...

现在一切都可以正常编译和运行,但似乎不是一个好方法...

最佳答案

我可以想到以下选项:

在桌面应用程序中,定义一个宏,MYCLASS_STATIC 并更改要使用的 .h 文件:

#ifdef MYCLASS_STATIC
# define MYCLASS_EXPORT
#elif defined(MYCLASS_LIBRARY)
# define MYCLASS_EXPORT __declspec(dllexport)
#else
# define MYCLASS_EXPORT __declspec(dllimport)
#endif

关于c++ - 如何声明库和应用程序之间共享的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910238/

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