/*****************************************************************************
* Copyright (c) 1990-98 Digi International Inc., All Rights Reserved
* 
* This software contains proprietary and confidential information of Digi
* International Inc.  By accepting transfer of this copy, Recipient agrees
* to retain this software in confidence, to prevent disclosure to others,
* and to make no use of this software other than that for which it was
* delivered.  This is an unpublished copyrighted work of Digi International
* Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly
* prohibited.
* 
* Restricted Rights Legend
*
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in
* Technical Data and Computer Software clause at DFARS 252.227-7031 or
* subparagraphs (c)(1) and (2) of the Commercial Computer Software -
* Restricted Rights at 48 CFR 52.227-19, as applicable.
*
* Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
*
*****************************************************************************/


// ObjectFactory.h: 
//
//////////////////////////////////////////////////////////////////////

#if !defined(OBJECTFACTORY_H)
#define OBJECTFACTORY_H

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "ConfigObject.h"
#include "Adapter.h"
#include "Line.h"
#include "Protocol.h"
#include "Service.h"
#include "Port.h"


//////////////////////////////////////////////////////////////////////
// APIs implemented in external DLLs
//////////////////////////////////////////////////////////////////////

// NOTE:
//    ALL derived classes that reside in external DLLs MUST provide the following APIs
//    into their DLLs.  These allow access for creating/deleting objects of the derived class.

// Call NewObj() to create a new instance of the derived class.
// BOOL APIENTRY NewObj(CConfigObject const ** const ppObj, CString const & strName, HKEY const hKeyRoot, CString const & strRegPath, CConfigObject const * const pParent);
typedef BOOL (APIENTRY *NEWOBJPROC)(CConfigObject ** const, CString const &, HKEY const, CString const &, CConfigObject const * const);
#define NEWOBJPROCNAME TEXT("NewObj")

// Call DeleteObj() to free up the new'd object of the derived class..
// void APIENTRY DeleteObj(CConfigObject const ** const ppObj);
typedef void (APIENTRY *DELETEOBJPROC)(CConfigObject ** const);
#define DELETEOBJPROCNAME TEXT("DeleteObj")


//////////////////////////////////////////////////////////////////////
// Exported functions from the factory
//////////////////////////////////////////////////////////////////////

extern BOOL FW_EXPORTED_API NewConfigObject(CConfigObject ** const ppObj,
                                            int const eType,
                                            CString const & strName,
                                            HKEY const hKeyRoot,
                                            CString const & strRegPath,
                                            CConfigObject const * const pParent);

extern void FW_EXPORTED_API DeleteConfigObject(CConfigObject ** const ppObj);

#endif // !defined(OBJECTFACTORY_H)
