Sam*_*Jam 2 c++ dll dependencies loading
我有一个将由程序加载的DLL,该DLL将依次加载另一个DLL来处理一些不应该在主DLL中的东西.但是,第二个DLL需要能够与第一个DLL通信.DLL是否可以在加载它的DLL中使用导出的函数?例如
这是否有效,是否是正确的方法?
是的,它会起作用.DLL B可以安全地调用DLL A上的LoadLibrary来获取GetProcAddress调用其所需函数的实例句柄.模块加载器将发现DLL A已经在进程内存中,并且只会将它的实例句柄返回给DLL B.
注意:虽然主程序依赖并加载DLL A的一个版本,并且DLL B需要不同的版本,但有版本控制的具体注意事项.如果是这种情况,DLL B必须使用它所需的DLL A版本的显式路径调用LoadLibrary,并且DLL A必须支持SxS以支持在进程内存中加载它的两个版本.
如果您同时控制进程和DLL B,最简单的方法是避免这种情况,以便始终确保它们需要/使用相同版本的DLL A.