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

时间:2015-10-02 15:06:10

标签: c++ windows

我有一个在两个项目之间共享的公共实用程序类,一个桌面应用程序项目和一个库项目(dll)。我在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)的一部分时,我从编译器得到一个"不一致的dll链接"由于MYCLASS_EXPORT声明而导致错误。

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

为了更清楚,我找到的工作解决方案如下:

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

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

    public:
    ...

现在一切都编译好了,但似乎不是一个好方法......

1 个答案:

答案 0 :(得分:0)

我可以考虑以下选项:

在桌面应用程序中,定义宏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