为什么我的DLL要求我的程序有一个特定的名称?

时间:2018-04-02 21:19:31

标签: c++ dll

我已经在我开发的C ++应用程序中创建了一些类,允许第三方开发人员创建自己的DLL,这些DLL将我的对象子类化,并让应用程序通过它们加载子类。 DLL在运行时。这一部分都有效。

当应用程序可执行文件的名称发生更改时,会出现此问题。假设我通过此应用程序,将其称为" App.exe",并将其重命名为App-02.exe,以区别于他测试的其他版本。当App-02.exe尝试加载DLL时,它会抛出错误: "程序无法启动,因为您的计算机缺少App.exe。尝试重新安装程序以解决此问题。"

这是一个明显的解决方案,只是不要重命名可执行文件。但是为什么DLL甚至应该关心加载它的程序是什么?

1 个答案:

答案 0 :(得分:0)

听起来基类是在App.exe中定义的,所以你的二进制文件中有一个循环依赖(app.exe - > plug-in.dll - > app.exe)。您可以使用依赖性反转原则来打破此循环。基本上,将您的基类移出app.exe并转换为新的.dll。然后你有这样的东西:app.exe - > plug-in-api.dll,plug-in.dll - >插件-api.dll。

当然,如果你这样做,你的测试人员可能只是重命名插件-api.dll,一切都会再次破坏。

https://en.wikipedia.org/wiki/Dependency_inversion_principle