I have a class which has two overloaded functions. How do I export it from a dll and also how to use it by other C++ classes? My class looks like this:
#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";
}
A common approach is to have a single macro (let’s call it
EXPORT) which either expands todllimportordllexportdepending on whether some sort of “building the DLL right now” define is set, like this:The idea is that when building your DLL, you add
MAKEDLLto the preprocessor definitions. That way, all the code will be exported. Clients who link against your DLL (and hence include this header file) don’t need to do anything at all. By not definingMAKEDLL, they will automatically import all the code.The advantage of this approach is that the burden of getting the macros right is moved from the many (the clients) to just the author of the DLL.
The disadvantage of this is that when using the code above as it is, it’s no longer possible to just compile the code directly into some client module since it’s not possible to define the
EXPORTmacro to nothing. To achieve that, you’d need to have another check which, if true, defines EXPORT to nothing.On a slightly different topic: in many cases, it’s not possible (or desired!) to export a complete class like that. Instead, you may want to just export the symbols you need. For instance, in your case, you may want to just export the two public methods. That way, all the private/protected members won’t be exported: