The KCMS framework uses external entry points to load your derivative as an executable. The mandatory and optional entry points are described.
When you derive from a KcsIO class, the mandatory external entry points are:
extern long KcsDLOpenIOCount;
KcsIO *KcsCreateIO(KcsStatus *aStat,
const KcsProfileDesc *aDesc);
The KcsCreateIO() method creates an instance of a KcsIO derivative. The instance is determined by aDesc->type, which contains the derivative portion of the class identifier (see "Creating OWconfig File Entries").
When you derive from a KcsIO class, the optional external entry points are:
KcsStatusId KcsInitIO(); KcsStatusId KcsCleanupIO();
The following example shows you how to use the entry points when creating a KcsIO derivative.
/* External loadable interface */
extern "C"
extern long KcsDLOpenIOCount;
KcsStatus KcsInitIO();
KcsIO *KcsCreateIO(KcsStatus *aStatus,
const KcsProfileDesc *aDesc);
KcsStatus KcsCleanupIO();
//Loadable stuff
//external DL open count to support runtime derivation
extern long KcsDLOpenIOCount = 0;
/* Runtime derivable routine */
KcsIO *
KcsCreateIO(KcsStatus *aStat, const KcsProfileDesc *Desc)
{
//Create the new derivative
return(new KcsSolarisFile(aStat,
aDesc->desc.solarisFile.fileName, aDesc->desc.solarisFile.hostName,
aDesc->desc.solarisFile.oflag, aDesc->desc.solarisFile.mode);
}
KcsStatus
KcsInitIO(long libMajor, long libMinor, long *myMajor, long *myMinor)
{
// Set up the return values
*myMajor = KCS_MAJOR_VERSION;
*myMinor = KCS_MINOR_VERSION;
//Check the major version
if (libMajor != KCS_MAJOR_VERSION)
return (KCS_CMM_MAJOR_VERSION_MISMATCH);
//Currently, if minor version of library is less than the KCMS
// minor version, return an error.
if (libMinor != KCS_MINOR_VERSION)
return (KCS_CMM_MINOR_VERSION_MISMATCH);
//Library guarantees if your minor version number is greater than
//KCMS minor version number, it will handle it. No more init.
return(KCS_SUCCESS);
}
KcsStatus KcsCleanupIO()
{
/* Clean up is performed in the destructor */
return (KCS_SUCCESS);
}