我有一个有两个重载函数的类。如何从 dll 导出它以及如何由其他 C++ 类使用它?我的班级是这样的:
#define DECLDIREXP __declspec(dllexport)
#define DECLDIRIMP __declspec(dllimport)
class DECLDIREXP xyz
{
public:
void printing();
void printing(int a);
};
using namespace std;
void xyz::printing()
{
cout<<"hello i donot take any argument";
}
void xyz::printing(int a)
{
cout<<"hello i take "<< a <<"as argument";
}
一种常见的方法是使用一个宏(我们称之为EXPORT
) 要么扩展到dllimport
or dllexport
取决于是否设置了某种“立即构建 DLL”定义,如下所示:
#ifdef MAKEDLL
# define EXPORT __declspec(dllexport)
#else
# define EXPORT __declspec(dllimport)
#endif
class EXPORT xyz {
// ...
};
这个想法是,在构建 DLL 时,您添加MAKEDLL
到预处理器定义。这样,所有代码都将被导出。链接到您的 DLL(因此包含此头文件)的客户端根本不需要执行任何操作。通过不定义MAKEDLL
,他们会自动导入所有代码。
这种方法的优点是,正确使用宏的负担从许多人(客户端)转移到了 DLL 的作者身上。
这样做的缺点是,当按原样使用上面的代码时,不再可能直接将代码编译到某个客户端模块中,因为无法定义EXPORT
宏到什么都没有。为了实现这一点,您需要进行另一项检查,如果为真,则将 EXPORT 定义为空。
关于一个稍微不同的主题:在许多情况下,不可能(或不需要!)导出这样的完整类。相反,您可能只想导出所需的符号。例如,在您的情况下,您可能只想导出两个公共方法。这样,所有私有/受保护的成员都不会被导出:
class xyz
{
public:
EXPORT void printing();
EXPORT void printing(int a);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)