Listing 5

// WinSharedLibrary.cxx

#include "SharedLibrary.h"
#include <windows.h>
#include <string.h>
#include <iostream>

using namespace std;

class WinSharedLibrary : public SharedLibrary
{
  public:
    WinSharedLibrary(const char* name)
    throw (SharedLibraryException);
    ~WinSharedLibrary();

    void* findSymbol(const char* name)
    throw (SharedLibraryException);

  private:
    HINSTANCE m_handle;
};
SharedLibrary* SharedLibrary::openSharedLibrary(const char* name)
    throw (SharedLibraryException)
{
    return new WinSharedLibrary(name);
}
WinSharedLibrary::WinSharedLibrary(const char* name)
    throw (SharedLibraryException)
    : m_handle(0)
{
    m_handle = LoadLibrary(name);
    if (m_handle == 0)
    {
    char buffer[255];
    strcpy(buffer,"Open Library Failure");
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError(),
        0, buffer,sizeof(buffer),0);
    throw SharedLibraryException(buffer);
    }
}
WinSharedLibrary::~WinSharedLibrary()
{
    if (!FreeLibrary(m_handle))
    {
    char buffer[255];
    // format buffer as above
    cerr << buffer << endl;
    }
}
void* WinSharedLibrary::findSymbol(const char* name)
    throw (SharedLibraryException)
{
    void* sym = GetProcAddress(m_handle,name);
    if (sym == 0)
    {
    char buffer[255];
    // format buffer as above
    throw SharedLibraryException(buffer);
    }
    else
   return sym;
}