All client programs should adhere to the following rules regarding initialization and termination:
A client program should always call odInitialize() before any objects are created
and prior to any other calls.
The OdDbSystemServices pointer passed to odInitialize() should not be NULL,
and it must persist until after the corresponding call to odUninitialize(). If this
object is deleted or goes out of scope before odUninitialize() is called, exceptions
occur.
odUninitialize() should be called after all calls have been made and all objects
(except for the OdDbSystemServices pointer passed to odInitialize()) have been
deleted. Note that a smart pointer to an OdRx* object (OdDbDatabasePtr for example)
that is not destroyed prevents the object from being deleted. All smart pointers must be
released (or assigned NULL value) before calling odUninitialize().