mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
70 lines
1.8 KiB
// low-level support for the add-on services
|
|
|
|
// this may be superceeded if the add-on services go to ocxs
|
|
|
|
#include "stdafx.h"
|
|
#include "keyobjs.h"
|
|
#include "addons.h"
|
|
|
|
|
|
//----------------------------------------------------------------
|
|
// construction
|
|
//----------------------------------------------------------------
|
|
CAddOnService::CAddOnService() :
|
|
m_library( NULL ),
|
|
m_proc( NULL )
|
|
{;}
|
|
|
|
//----------------------------------------------------------------
|
|
// destruction
|
|
//----------------------------------------------------------------
|
|
CAddOnService::~CAddOnService()
|
|
{
|
|
// free the library if it has been loaded
|
|
if ( m_library )
|
|
FreeLibrary( m_library );
|
|
m_library = NULL;
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
// Initialize the service. Loads the dll and makes sure
|
|
// the callback we need is there
|
|
//----------------------------------------------------------------
|
|
BOOL CAddOnService::FInitializeAddOnService( CString &szName )
|
|
{
|
|
// load the library module
|
|
m_library = LoadLibrary( szName );
|
|
|
|
DWORD err = GetLastError();
|
|
|
|
// did we successfully load the library?
|
|
if ( !m_library ) return FALSE;
|
|
|
|
// get the main procedure address
|
|
m_proc = (LOADPROC)GetProcAddress( m_library, "LoadService" );
|
|
|
|
// did we successfully load the procedure address?
|
|
if ( !m_proc )
|
|
{
|
|
FreeLibrary( m_library );
|
|
m_library = NULL;
|
|
return FALSE;
|
|
}
|
|
|
|
// success!
|
|
return TRUE;
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
// call into the dll to create a new service object that
|
|
// gets connected to a machine object
|
|
//----------------------------------------------------------------
|
|
BOOL CAddOnService::LoadService( CMachine* pMachine )
|
|
{
|
|
ASSERT( m_library );
|
|
ASSERT( m_proc );
|
|
|
|
// call into the dll to load a service object into the machine object
|
|
return (*m_proc)( pMachine );
|
|
}
|
|
|