我有一个在两个项目(一个桌面应用程序项目和一个库项目 (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/