代码之家  ›  专栏  ›  技术社区  ›  PixelThis

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

  •  0
  • PixelThis  · 技术社区  · 7 年前

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

    当应用程序可执行文件的名称更改时,就会出现问题。假设我将这个应用程序传递给测试人员,称之为“App.exe”,他将其重命名为App-02。exe将其与他测试的另一个版本区分开来。App-02时。exe尝试加载DLL,但引发错误: “由于您的计算机中缺少App.exe,程序无法启动。请尝试重新安装程序以解决此问题。”

    有一个显而易见的解决方案,就是不要重命名可执行文件。但是为什么DLL甚至应该关心加载它的程序的名称呢?

    1 回复  |  直到 7 年前
        1
  •  0
  •   burlyearly    7 年前

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

    当然,如果您这样做,您的测试人员可能只是重命名插件api。dll,一切都会再次中断。

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