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); }