This guide discusses how Rhino loads C/C++ plugins.
Rhino plugins are loaded twice. The first time as follows:
hModule = ::LoadLibraryEx( lpFileName, 0, DONT_RESOLVE_DLL_REFERENCES | LOAD_WITH_ALTERED_SEARCH_PATH );
By using the
DONT_RESOLVE_DLL_REFERENCES flag, the system does not call the plugin’s
DllMain for process and thread initialization and termination. Also, the system does not load additional executable modules that are referenced by the specified module. This allows Rhino to quickly verify the Rhino SDK version and that the proper plugin exports are available.
LOAD_WITH_ALTERED_SEARCH_PATH flag is used so
LoadLibraryEx looks for dependent DLLs in the directory specified by
lpFileName, not by Rhino.exe.
The plugin module is freed as follows:
::FreeLibrary( hModule );
If the above was successful, the plugin is loaded for a final time as follows:
hModule = ::LoadLibraryEx( lpFileName, 0, LOAD_WITH_ALTERED_SEARCH_PATH );
Again, the altered search path flag is used.