After doing more research into this problem, I think I know what is going wrong. According to the Dependency Walker documentation there are 5 different types of module dependencies.
1. Implicit Dependency (also known as a load-time dependency or sometimes incorrectly referred to as static dependency): Module A is implicitly linked with a LIB file for Module B at compile/link time, and Module A's source code actually calls one or more functions in Module B. Module B is a load time dependency of Module A and will be loaded into memory regardless if Module A actually makes a call to Module B at run-time. Module B will be listed in Module A's import table. 2. Delay-load Dependency: Module A is delay-load linked with a LIB file for Module B at compile/link time, and Module A's source code actually calls one or more functions in Module B. Module B is a dynamic dependency and will only be loaded if Module A actually makes a call to Module B at run-time. Module B will be listed in Module A's delay-load import table. 3. Forward Dependency: Module A is linked with a LIB file for Module B at compile/link time, and Module A's source code actually calls one or more functions in Module B. One of the functions called in Module B is actually a forwarded function call to Module C. Module B and Module C are both dependencies of Module A, but only Module B will be listed in Module A's import table. 4. Explicit Dependency (also known as a dynamic or run-time dependency): Module A is not linked with Module B at compile/link time. At runtime, Module A dynamically loads Module B via a LoadLibrary type function. Module B becomes a run time dependency of Module A, but will not be listed in any of Module A's tables. This type of dependency is common with OCXs, COM objects, and Visual Basic applications. 5. System Hook Dependency (also known as an injected dependency): This type of dependency occurs when another application hooks a specific event (like a mouse event) in a process. When that process produces that event, the OS can inject a module into the process to handle the event. The module that is injected into the process is not really a dependent of any other module, but does resides in that process' address space. It appears to me that currently when I link my application against FileIO.lib and ImageFileIO.lib I am creating a Delay-load dependency. So because the user will never call any functions in either of these libraries, there are not loaded into memory. If this is correct then we need to either create an Implicit Dependency, which I have no idea how to do, or start using a more traditional plugin architecture and an explicit dependency. Does anyone that might know more about this have anything to add? Does anyone know how to create an implicit dependency? How do people feel about a more traditional plugin system that would search a directory on disk calling LoadLibrary on each file in path/to/opensg/lib/plugins? I personally would like to get away from relying on static data initialization in order to do plugin registration. So for example each plugin would define a C function call that returns an instance of it's internal image/model loading class. Then we could load each library in a plugin directory, look for the correct symbol, and then explicitly get a reference to an image loader. Thanks, Aron ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Opensg-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensg-users
