我在 Delphi 7 中有一个主应用程序,它加载一个 Delphi 7 dll(让我们调用“X”dll)。这个dll是一个“应用程序核心”和一个“基于数据库代码的框架”。这个dll包含很多东西。除了主应用程序之外,我还有很多其他 dll 使用 X dll 来访问数据库。这是一个遗留应用程序。
我需要将应用程序迁移到 Delphi 10 Seattle,但我不能一次完成。这是一个非常大的应用程序。
所以我想出了这个想法:转换主应用程序并创建一个新的数据库框架,这次在 Delphi Seattle BPL 中,静态加载。当我的应用程序启动时,我会动态加载 X dll。在 X dll 中,我动态加载 BPL 并将访问数据库的所有方法更改为使用 BPL 方法。这样,我现在不会触摸的其他 dll 将继续工作。
问题是:我无法从 X dll 加载 BPL。它只是提出了一个AV。我尝试使用 LoadLibrary 和 LoadPackage,都失败了。我发现如果我在 Delphi Seattle 编译那个 X dll,它就像一个魅力。但是,我不能那样做,因为就像我开始说的那样,这个X dll有很多超出数据库访问的东西,我现在没有时间转换。
所以,问题是:如何从 Delphi 7 DLL 加载 Delphi 10 Seattle BPL?