delphi 无法在Windows 10上加载Firebird客户端库

xoshrz7s  于 2023-10-18  发布在  Windows
关注(0)|答案(1)|浏览(132)

两天前,我安装了Windows 10 Build 1709 16299.192和Embarcadero Delphi 10.2.2东京.
因为我安装了它们,所以我的应用程序在运行时无法加载Firebird客户端库。
如果我有一个用旧的Windows和 Delphi 10.2.2编译的exe文件,它工作得很好,但是用新的Windows和 Delphi 编译的每个exe文件都不工作。
如果我通过TFDConnection测试连接,它会成功连接,但当我运行应用程序时,我会得到以下错误:
[firedac][phys][fb]-314无法加载供应商库[c:\users\username\desktop\projectname\bin\fbclient.dll]无法找到指定的模块
提示:检查它是否在PATH或应用程序EXE目录中,并且具有x86位数。
路径正确,客户端库是x86的。在安装Windows 10 Build 1907 16299.192之前,同一应用程序正在工作。
我试过DevArt UniDac并编译为Win 64,仍然有同样的问题。
重新安装Windows和 Delphi 10.2.2(测试了两个版本25.0.28979.1978和25.0.29039.2004)仍然没有帮助。
我想这是权限问题,但我不知道如何解决。我给了bds.exe所有组的所有权限,但仍然不起作用。
我的测试应用程序上只有这段代码

procedure TForm1.FormCreate(Sender: TObject);
var
  Path: string;
begin
  Path := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
  FDPhysFBDriverLink1.VendorHome := Path;
  FDPhysFBDriverLink1.VendorLib := 'fbclient.dll';
  FDConnection1.Params.Database := Path + 'FBDV3.0.FDB';
  FDConnection1.DriverName := 'FB';
  FDConnection1.Params.UserName := 'sysdba';
  FDConnection1.Params.Password := 'masterke';
  FDConnection1.LoginPrompt := False;
  FDConnection1.Connected := True;
end;

bin文件夹中包含的文件和文件夹:
插件(文件夹包含engine12.dll)
fbclient.dll
ib_util.dll
icudt52.dll
icudt52l.dat
icuuc52.dll

avwztpqn

avwztpqn1#

我只需要安装Microsoft Visual C++ 2010 Redistributable

这花了我几个小时的尝试和尝试许多事情,我找不到任何线索是什么原因,即使通过调试深入到FD源代码( Delphi 10.4.2)。太糟糕了,任何地方都没有有用的错误消息。但后来我使用SysInternals Process Explorer并发现了这种依赖关系。感谢@雷米。(只是复制msvcr100.dll对我的情况没有帮助。
当然,我不能说这是否会在这里有所帮助,但至少它可以帮助许多其他人。症状是相同的-它在IDE(数据资源管理器)中工作,但在编译的应用程序中不工作,即使dll在那里。
通过调试,我还验证了错误消息不仅要求fbclient.dll,而且要求fbembed.dll,不是任何错误参数的标志:如果第一个不能被加载,则它总是寻找第二个(不仅仅是如果找不到)。

相关问题