Plugins DLL在一个应用程序中工作,但在另一个应用程序中不工作--环境差异?

Plugins DLL在一个应用程序中工作,但在另一个应用程序中不工作--环境差异?,plugins,dll,com,driver,Plugins,Dll,Com,Driver,广义地说 我有一个在运行时加载的COM DLL。该DLL从注册表中指定的绝对路径加载另一个DLL。当我在一个独立的测试可执行文件中加载COM DLL时,第二个DLL被找到并加载良好。但是,当我在不同的可执行文件中加载COM DLL时,找不到第二个DLL。两个可执行文件位于同一目录中,并且具有相同的权限。COM DLL是为可执行文件提供高级接口的驱动程序;理论上,这两个可执行文件发出相同的调用 任何指向可能导致此问题的调查事项的指针?得出了一个不太令人兴奋的结论:注销第二个DLL并重新注册它解决了

广义地说

我有一个在运行时加载的COM DLL。该DLL从注册表中指定的绝对路径加载另一个DLL。当我在一个独立的测试可执行文件中加载COM DLL时,第二个DLL被找到并加载良好。但是,当我在不同的可执行文件中加载COM DLL时,找不到第二个DLL。两个可执行文件位于同一目录中,并且具有相同的权限。COM DLL是为可执行文件提供高级接口的驱动程序;理论上,这两个可执行文件发出相同的调用


任何指向可能导致此问题的调查事项的指针?

得出了一个不太令人兴奋的结论:注销第二个DLL并重新注册它解决了问题。我多次注册了DLL,没有想到先注销它会有什么不同


感谢@CareyGregory

独立EXE和其他EXE都是32位还是64位,或者它们在这方面不同?请尝试使用LoadLibrary加载DLL,以便在失败时调用GetLastError。您可能还想在其上使用Dependency Walker。@GTG在32位windows上运行两个32位。@CareyGregory我没有访问这两个可执行文件的源代码的权限,但至少可以使用rundll32查看DLL。我看到的唯一缺少的依赖项是IDSHIMS.DLL(很好)和MSVCR90.DLL(可能有问题)。MSVCR90.DLL是目前为止最好的线索,但因为它在一个exe中工作,而不是在另一个exe中工作,我不确定我应该在Dependency Walker中看到什么。我在想,这可能更接近于每个exe可用的已注册DLL的差异?Thank-IDSHIMS.DLL总是显示为缺失,但MSVCR90.DLL肯定是个问题。我猜其中一个exe是静态链接到C运行时库的,因此它不会显示缺少的依赖项,但另一个使用C运行时的DLL版本,所以它会。获取MSVCR90.DLL的副本,将其复制到\windows\system32,这可能会解决您的问题。