Can I put a class inside a DLL? The class i wrote is this:
class SDLConsole
{
public:
SDLConsole();
~SDLConsole(){};
void getInfo(int,int);
void initConsole(char*, char*, SDL_Surface*, int, int, int);
void sendMsg(char*,int, SDL_Surface*);
void cls(SDL_Surface*);
private:
TTF_Font *font;
SDL_Surface *consoleImg;
int width, pos, height, line, size, ctLine;
SDL_Surface* render(char*,int);
};
I know how to load a DLL and use the function inside a DLL, but how can I put a class inside a DLL? Thank you very much.
Solution suggested by bcsanches,
If you're going to use this approach as suggested by bcsanches, then make sure that you use the following function to
delete
your object,Define such functions always in pair, as it ensures that you delete your objects from the same heap/memory-pool/etc they were created on. See this pair-functions
If you want to expose the data in a class, the above solutions won't cut it. You have to slap a
__declspec(dllexport)
on the class itself in the DLL compilation, and a__declspec(dllimport)
in the module that links to the DLL.A common technique is to do this (Microsoft wizards produce code like this):
Then make sure
EXPORT_API
is defined in the DLL project, and make sure it isn't defined in the module that links to the DLL.If you create a new DLL project in Visual C++ from scratch, and check the check box "Export symbols", some sample code will be generated using this technique.
If you use run time dynamic linking (uses LoadLibrary to load the dll) you cannot access the class directly, you need to declare a interface for your class and create a function that returns a instance of this class, like this:
Otherwise, if you link the dll during load time, just use the information provided by icecrime: http://msdn.microsoft.com/en-us/library/a90k134d.aspx
You can, and all the information you need are on this page and this page :
All there is left is to define the preprocessor symbol
_EXPORTING
when building the DLL.