The following sample illustrates the class interface definition file (IDL):
//# CLASS: Stack //# //# CLASS HIERARCHY: //# //# SOMObject //# ÀÄÄÄWPObject //# ÀÄÄÄWPAbstract //# ÀÄÄÄStack //# #ifndef wpstack_idl #define wpstack_idl #include "wpabs.idl" typedef somToken PSTACKENTRY; //# Dummy typedef for instance variable interface M_Stack; interface Stack : WPAbstract { ULONG InsertStackPage(in HWND hwndDlg); //# PARAMETERS: //# HWND hwndDlg // In - notebook dialog window handle //# ULONG return // Out - 0 = error occurred, else page # //# //# DESC: Adds the new Settings notebook page. BOOL Lock(); //# PARAMETERS: //# BOOL return // Out - TRUE = successful //# FALSE = errror //# //# DESC: Lock the stack using a mutex semaphore so we don't have //# to worry about multiple threads messing up the linked list. BOOL Pop(in PVOID pBuffer, inout ULONG pcbBuffer); //# PARAMETERS: //# PVOID pBuffer, // In - pointer to buffer for popped item //# PULONG pcbBuffer); // InOut - size in bytes of pop buffer (in), //# // size actually returned (out) //# BOOL return // Out - TRUE = successful //# FALSE = errror //# DESC: Pops an entry from the stack. BOOL Push(in PVOID pNewItem, in ULONG cbNewItem); //# PARAMETERS: //# PVOID pNewItem, // In - pointer to the item to push //# ULONG cbNewItem // In - size in bytes of item to push //# BOOL return // Out - TRUE = successful //# FALSE = errror //# DESC: Pushes an entry onto the stack. BOOL Unlock(); //# PARAMETERS: //# BOOL return // Out - TRUE = successful //# FALSE = errror //# //# DESC: Unlock the stack, releasing the mutex semaphore. #ifdef __SOMIDL__ implementation { releaseorder: InsertStackPage, Lock, Pop, Push, Unlock; /* * Class modifiers */ functionprefix = stk_; majorversion = 1; minorversion = 2; filestem = wpstack; metaclass = M_Stack; callstyle = oidl; dllname = "wpstack.dll"; /* * Internal instance variables */ BOOL bInitialized; PSTACKENTRY pStackTop; HMTX hmtxStack; /* * Passthru to the .IH file the following: */ passthru C_ih = "#define STK_APPLICATION \"wpstack class\"" "#define STK_PERSISTENTCOUNTKEY \"object count\"" "#define MPNULL (MPFROMP( NULL ))" "#define MPZERO (MPFROMSHORT( 0 ))" "#define MRTRUE (MRFROMSHORT( (SHORT) TRUE ))" "#define MRFALSE (MRFROMSHORT( (SHORT) FALSE ))" "" "typedef struct _STACKENTRY" "{" " struct _STACKENTRY *Next;" " BYTE ReserveZeros[8];" " ULONG cbEntry;" " BYTE Entry[1];" "} STACKENTRY, *PSTACKENTRY;" ""; /* * Passthru to the .H file the following: */ passthru C_h = "#define STK_AWAKECOUNT 1" "#define STK_PERSISTENTCOUNT 2" ""; /* * Method modifiers */ wpAddSettingsPages: override; wpFree: override; wpInitData: override; wpObjectReady: override; wpRestoreState: override; wpSaveState: override; wpSetup: override; wpSetupOnce: override; wpUnInitData: override; }; #Endif /* __SOMIDL__ */ }; interface M_Stack : M_WPAbstract { ULONG clsDecObjectCount(in ULONG ulCountType); //# PARAMETERS: //# ULONG ulCountType // In - STK_AWAKECOUNT, //# STK_PERSISTENTCOUNT //# ULONG return // Out - new count value //# //# DESC: Decrements the number of defined object instances. ULONG clsIncObjectCount(in ULONG ulCountType); //# PARAMETERS: //# ULONG ulCountType // In - STK_AWAKECOUNT, //# STK_PERSISTENTCOUNT //# ULONG return // Out - new count value //# //# DESC: Increments the number of defined object instances. HMODULE clsQueryModuleHandle(); //# PARAMETERS: HMODULE return // Out - DLL module handle //# //# DESC: Gets resource module handle. ULONG clsQueryObjectCount(in ULONG ulCountType); //# PARAMETERS: //# ULONG ulCountType // In - STK_AWAKECOUNT, //# STK_PERSISTENTCOUNT //# ULONG return // Out - count of awake/persistent instances //# //# DESC: Returns the current number of defined object instances. #ifdef __SOMIDL__ implementation { releaseorder: clsDecObjectCount, clsIncObjectCount, clsQueryModuleHandle, clsQueryObjectCount; /* * Class modifiers */ functionprefix = stkM_; majorversion = 1; minorversion = 2; filestem = wpstack; callstyle = oidl; dllname = "wpstack.dll"; /* * Internal instance variables */ HMODULE hmod; /* Resource module handle */ ULONG ulAwakeCount; /* No. of stack instances in memory */ ULONG ulPersistentCount; /* Total number of stack instances */ /* * Method modifiers */ wpclsInitData: override; wpclsQueryDefaultHelp: override; wpclsQueryDefaultView: override; wpclsQueryIconData: override; }; #Endif /* __SOMIDL__ */ }; #Endif /* wpstack_idl */