我想把一个旧的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;
问题是CRPE32.dll已加载但它不知道其他DLL的位置,因为它们不在搜索路径中。
你有几个选择。
你不能使用CR版本13> Delphi。 CR V13是.NET
我现在使用CR V13和Delphi XE2。您需要使用C#或Delphi Prism编写.NET包装器并从Delphi调用它。