windows-nt/Source/XPSP1/NT/base/cluster/admin/cluadmex/dllbase.h
2020-09-26 16:20:57 +08:00

79 lines
1.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998 Microsoft Corporation
//
// Module Name:
// DllBase.h
//
// Abstract:
// Dynamic Loadable Library (DLL) wrapper class.
//
// Implementation File:
// DllBase.cpp
//
// Author:
// Galen Barbee (galenb) February 11, 1998
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _DLLBASE_H_
#define _DLLBASE_H_
class CDynamicLibraryBase
{
public:
CDynamicLibraryBase()
{
m_lpszLibraryName = NULL;
m_lpszFunctionName = NULL;
m_hLibrary = NULL;
m_pfFunction = NULL;
}
virtual ~CDynamicLibraryBase()
{
if (m_hLibrary != NULL)
{
::FreeLibrary(m_hLibrary);
m_hLibrary = NULL;
}
}
BOOL Load()
{
if (m_hLibrary != NULL)
return TRUE; // already loaded
ASSERT(m_lpszLibraryName != NULL);
m_hLibrary = ::LoadLibrary(m_lpszLibraryName);
if (NULL == m_hLibrary)
{
// The library is not present
return FALSE;
}
ASSERT(m_lpszFunctionName != NULL);
ASSERT(m_pfFunction == NULL);
m_pfFunction = ::GetProcAddress(m_hLibrary, m_lpszFunctionName );
if ( NULL == m_pfFunction )
{
// The library is present but does not have the entry point
::FreeLibrary( m_hLibrary );
m_hLibrary = NULL;
return FALSE;
}
ASSERT(m_hLibrary != NULL);
ASSERT(m_pfFunction != NULL);
return TRUE;
}
protected:
LPCSTR m_lpszFunctionName;
LPCTSTR m_lpszLibraryName;
FARPROC m_pfFunction;
HMODULE m_hLibrary;
};
#endif //_DLLBASE_H_