我有一些用C ++编写的现有插件DLL,它们根据它们提供的功能导出1-40 +函数。主机应用程序将测试是否存在导出,如果它不存在,它将假定该插件不提供该功能。
我现在想编写一个位于主机和插件之间的填充DLL。主机将加载垫片,假设它是一个常规的插件DLL,并且垫片将依次加载实际的插件。填充DLL必须提供与实际插件完全相同的接口,因为导出函数的存在会影响主机的行为。
我想拥有它,以便当主机调用GetProcAddress时,它会通过shim DLL查看实际的插件DLL并返回指向插件DLL中的函数的指针。这可以在调用GetProcAddress时完成,也可以在加载时以某种方式通过某种方式生成导出来加载dll。
我目前的想法是使用一个钩子库来挂钩对GetProcAddress的调用并在适当的时候覆盖它们,但是首选的是对主机进程不那么具有干扰性的东西。
动态执行此操作的替代方法是在我们的构建管道中执行此操作。我们将查看插件dll并获取所有导出的符号,然后构建一个复制该接口的自定义填充程序。这是可能的,但它也可能比在运行时更多地工作。
编辑2014年2月1日:没有明显支持的方式这样做,我遇到了挂钩GetProcAddress的问题所以我最终通过我们的构建管道执行此操作并转发导出。