Linking Custom Applications into Other Applications
Support for a custom module can be linked statically into an application if desired.
For example, this can be done for the CustomObjectsModule example by including the following
macros in the program that you want to use the extension module:
#ifndef _TOOLKIT_IN_DLL_
// Declare the entry point function for the custom module (one for each module).
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(CustomObjectsModule);
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(ModelerModule);
ODRX_BEGIN_STATIC_MODULE_MAP()
ODRX_DEFINE_STATIC_APPLICATION("ExCustObjs", CustomObjectsModule)
ODRX_DEFINE_STATIC_APPLICATION("ModelerGeometry", ModelerModule)
ODRX_END_STATIC_MODULE_MAP()
#endif
After the static module map has been declared, the host application should call the
ODRX_INIT_STATIC_MODULE_MAP macro once to initialize the static module map. This should
be done after odInitialize.
After the static module map has been declared, the host application should call the
ODRX_INIT_STATIC_MODULE_MAP macro once to initialize the static module map. This should
be done before odInitialize().
After these calls have been made, the registered custom module is loaded on demand
(for example, when this module is needed to serialize a custom object), or it can be loaded
explicitly by calling OdRxDynamicLinker::loadModule and passing the application name
that was registered in the first argument to ODRX_DEFINE_STATIC_APPLICATION.
You might notice that there is a class OdDgnModule : public OdRxModule and
OdDgn7IOModule : public OdRxModule. The OdDgnModule::initApp() method involves
the registration of all of the interfaces, such as OdDgDatabase::rxInit() and
OdDgLine2d::rxInit(). This module introduces, registers, and unregisters all
of the standard Drawings SDK .dgn-file objects.