Next: , Previous: , Up: Creating COM objects with GNAT   [Contents][Index]


5.3 LocalServer container implementation

LocalServers (Exe’s containing COM objects) must handle three command line parameters, /Embedding, /RegServer, and /UnregServer.

The LocalServer is called with /Embedding when the operating system needs to create COM objects that are contained in the server. It may also be used form the command line to pre-load the container in memory so that future requests of clients to create COM objects will be quicker. When embedding, the Win32 API CoInitialize is called to load the COM environment. Then a class factory for each COM object type that can be created is registered with the operating system using the CoRegisterClassObject API call. In order for the server to wait for the COM objects to be used and to later shutdown it starts up a Win32 message loop. Upon receiving notice that the server is no longer needed (all the COM objects it created were destroyed and there are no server locks), the messag loop exits and the API function CoUnregisterClassObject is called for each factory that was registered. The application then completes after calling the CoUnitialize API function to shutdown the COM environment.

When started with /RegServer or /UnregServer then same process used in the InProc implementation is used to register or unregister the type libraries and NT registry entries.

See the gnatexample-exe.adb file for a complete example.