Search code examples
c++classdllimportdllexport

How to use a class in DLL?


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

  • 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:

    class ISDLConsole
    {
      public:             
             virtual void getInfo(int,int) = 0;
             virtual void initConsole(char*, char*, SDL_Surface*, int, int, int) = 0;
             virtual void sendMsg(char*,int, SDL_Surface*) = 0;
             virtual void cls(SDL_Surface*) = 0;
     };
    
     class SDLConsole: public ISDLConsole
     {
        //rest of the code
     };
    
     __declspec(dllexport) ISDLConsole *Create()
     {
        return new SDLConsole();
     }
    

    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