0

我想将旧的 Delphi 应用程序(内置于 Borland Delphi 6)升级到 Crystal 报告的第 13 版。在使用 SAP 发布的“自己动手”指南中概述的步骤之前,它已升级到 10.2 版:http: //scn.sap.com/docs/DOC-11048

我再次提交了相同的更改,从 10.2 注册表项指向 13 个注册表项并更新 VCL 中的版本检查。VCL 组件现在成功地从正确的位置拉取 CRPE32.dll,但随后无法找到相关的 Dll 文件,例如 pvlocal-1-0.dll 和 local_fallback-4-0.dll。如果我将所有 Dll 移动到与找到它们的应用程序相同的文件夹中,但我不知道是否要将所有 16 个 dll 和许可证文件与应用程序一起打包。

我已将问题缩小到以下方法中的LoadLibrary调用。不幸的是,我找不到有关如何解决问题的任何信息,并希望社区可能知道解决问题的方法:

     function TCrpeEngine.PELoadCrpeDll(const CrpeLocation: string) : Bool;
var
  s1,s2 : string;
begin
  Result := False;
  s1 := Trim(CrpeLocation);
  CRDEngine := LoadLibrary(PChar(s1));
  {If an error occured, set the flag}
  if (CRDEngine < HINSTANCE_ERROR) then
  begin
    CRDEngine := 0;
    s2 := SysErrorMessage(GetLastError);
    if Trim(s2) = '' then
      s1 := CRD_ERROR_LOADING + Chr(10) + 'Windows Error Number: ' + IntToStr(GetLastError)
    else
      s1 := CRD_ERROR_LOADING + Chr(10) +
        'Windows Error Number: ' + IntToStr(GetLastError) + ' - ' + Trim(s2);
    CRDEngineError(s1);
  end
  else
    Result := True;
end;
4

2 回答 2

2

问题是 CRPE32.dll 已加载,但它不知道其他 DLL 的位置,因为它们不在搜索路径中。

你有几个选择。

  1. 您可以使用存储 DLL 的路径调用SetDLLDirectory 。
  2. 将文件所在的目录添加到系统路径。
  3. 将文件添加到搜索路径中已有的目录。
  4. 将文件添加到您的工作目录。
于 2013-08-06T17:16:46.380 回答
-1

您不能将 CR 版本 13 > 与 Delphi 一起使用。CR V13 是.NET

我现在使用带有 Delphi XE2 的 CR V13。您需要使用 C# 或 Delphi Prism 编写 .NET 包装器并从 Delphi 调用它。

于 2013-08-06T17:57:52.597 回答