我有一个在两个项目之间共享的公共实用程序类,一个桌面应用程序项目和一个库项目(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:
...
现在一切都编译好了,但似乎不是一个好方法......
答案 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