InnoSetup脚本使用JSONConfig.dll读取json文件,但无法从文件中检索键/值

q3qa4bjr  于 2021-06-14  发布在  其他
关注(0)|答案(1)|浏览(225)

我有一个InnoSetup脚本,它读取一个json文件来获取一些值(大多数是布尔值和字符串)。为了实现这一点,我使用了从这里下载的Tlamas JSONConfig.dll:https://github.com/nsdevaraj/inno-json-config。现在的问题是它无法从json-file读取值,因此只使用作为函数参数的默认值。我尝试调试它,但不知道如何调试,向其添加日志,并尝试通过向其代码添加调试日志来更新JSONConfig.dll,但只得到异常。
我做错什么了?感谢你能帮我。
我的原始代码是公司代码,所以我使用inno-json-config中给出的示例来做同样的事情,但失败了,所以我将发布该代码。我使用的是Inno Setup 5.6.1。变量WideString无法识别,我将其更改为String。
Example.iss

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "C:\inno-json-config-master\JSONConfig.dll"; Flags: dontcopy

[code]
function JSONQueryString(FileName, Section, Key, Default: String;
  var Value: String; var ValueLength: Integer): Boolean;
  external 'JSONQueryString@files:jsonconfig.dll stdcall';
function JSONQueryBoolean(FileName, Section, Key: String; 
  Default: Boolean; var Value: Boolean): Boolean;
  external 'JSONQueryBoolean@files:jsonconfig.dll stdcall';

function BoolToStr(Value: Boolean): string;
begin
  Result := 'True';
  if not Value then
    Result := 'False';
end;

procedure InitializeWizard;
var
  FileName: String;
  IntValue: Integer;
  StrValue: String;
  StrLength: Integer;
  BoolValue: Boolean;
begin
  FileName := 'C:\inno-json-config-master\Example.json';
  if FileExists(FileName) then begin
   Log('file found');
   end else begin
   Log('file not found');
  end;
  
  SetLength(StrValue, 16);
  StrLength := Length(StrValue);

  Log('StrValue_before:' + StrValue);
  Log('BoolValue_before: ' + BoolToStr(BoolValue));

  if JSONQueryString(FileName, 'Section_1', 'Key_1', 'Default', StrValue, StrLength) then 
  begin
    MsgBox('Section_1:Key_1=' + StrValue, mbInformation, MB_OK);
  end;
  Log('Section_1:Key_1=' + StrValue);
  
  if JSONQueryBoolean(FileName, 'Section_1', 'Key_3', True, BoolValue) then 
  begin
    MsgBox('Section_1:Key_3=' + BoolToStr(BoolValue), mbInformation, MB_OK);
  end;                
  Log('Section_1:Key_3=' + BoolToStr(BoolValue));

  if JSONQueryBoolean(FileName, 'Section_2', 'Key_3', True, BoolValue) then 
  begin
    MsgBox('Section_2:Key_3=' + BoolToStr(BoolValue), mbInformation, MB_OK);
  end;
  Log('Section_2:Key_3=' + BoolToStr(BoolValue));
end;
{
    "Section_1": {
        "Key_1": "String 1",
        "Key_2": "1",
        "Key_3": "True"
    },
    "Section_2": {
        "Key_1": "String 2",
        "Key_2": "2",
        "Key_3": "False"
    }
}
kgqe7b3p

kgqe7b3p1#

我发现了另一个解决问题的方法,那就是使用ini文件。Inno安装程序有内置的函数来读取/写入ini文件。这样我保存了很多时间,而且ini文件对用户来说也很容易读取。

相关问题