The Context Menu Extension DLL is a standard type of the Shell extension handlers. Like all such handlers, it is in-process Component Object Model (COM) object implemented as dynamic-link library (DLL). The Context Menu Extension handler exports two Interfaces in addition to IUnknown: IShellExtInit and IContextMenu. It uses standard functions and procedures that Windows Shell calls to manage data Between the extension and the Shell, like IShellExtInit::Initialize, IContextMenu::QueryContextMenu, IContextMenu::GetCommandString, IContextMenu::InvokeCommand. And (of course) like all another COM objects the Context Menu Extension DLL exports standard functions: DllMain, DllGetClassObject, DllCanUnloadNow.
BUT YOUR OWN APPLICATION NEEDN'T TO KNOW ALL THE THINGS WRITTEN ABOVE! Why? Because the Context Menu Extension DLL works only with the Shell and interacts with your own application through a Command Line, using ShellExecute function with the next parameters: lpOperation = "open"; lpFile = "fully_qualified_path_to_your_application" (The Context Menu Extension DLL reads this path from the registry) lpParameters = pointer to the zero terminated String that consists all the items the Context Menu Extension DLL had got from the Shell. Your application parses this string to retrieve all the item user had selected from the Windows Explorer. nShowCmd = SW_SHOWNORMAL
The last and only thing, you have to write in your code in order to start execute your application together with the Context Menu is Parsing the command line to get all the items, that Context Menu Extension Dll had passed into the Command Line string. Provided in this package TestMenu application helps you to test the parsing of the string (as well as menu functionality) prior you will code it in your project.