Ben setup aşağıda gösterilen gibi basit JSON yapılandırma dosyaları ile çalışma olanağı sağlar Inno JSON Config
denilen yeni bir proje, ettik ve okuyup dize, tamsayı ve mantıksal değerler yazmak için izin veren:
{
"Section_1":{
"Key_1": "String 1",
"Key_2": "1",
"Key_3": "True"
},
"Section_2":{
"Key_1": "String 2",
"Key_2": "2",
"Key_3": "False"
}
}
kullanım oldukça basittir (sap desteğini de ekleyeceğim zaman bile).
[Files]
Source: "JSONConfig.dll"; Flags: dontcopy
[Code]
function JSONQueryString(FileName, Section, Key, Default: WideString;
var Value: WideString; var ValueLength: Integer): Boolean;
external '[email protected]:jsonconfig.dll stdcall';
function JSONQueryBoolean(FileName, Section, Key: WideString;
Default: Boolean; var Value: Boolean): Boolean;
external '[email protected]:jsonconfig.dll stdcall';
function JSONQueryInteger(FileName, Section, Key: WideString;
Default: Int64; var Value: Int64): Boolean;
external '[email protected]:jsonconfig.dll stdcall';
function JSONWriteString(FileName, Section, Key,
Value: WideString): Boolean;
external '[email protected]:jsonconfig.dll stdcall';
function JSONWriteBoolean(FileName, Section, Key: WideString;
Value: Boolean): Boolean;
external '[email protected]:jsonconfig.dll stdcall';
function JSONWriteInteger(FileName, Section, Key: WideString;
Value: Int64): Boolean;
external '[email protected]:jsonconfig.dll stdcall';
function BoolToStr(Value: Boolean): string;
begin
Result := 'True';
if not Value then
Result := 'False';
end;
procedure InitializeWizard;
var
FileName: WideString;
IntValue: Int64;
StrValue: WideString;
StrLength: Integer;
BoolValue: Boolean;
begin
{ set the source JSON config file path }
FileName := 'c:\Example.json';
{ allocate string buffer to enough length }
SetLength(StrValue, 16);
{ set the buffer length value }
StrLength := Length(StrValue);
{ query string value }
if JSONQueryString(FileName, 'Section_1', 'Key_1', 'Default', StrValue,
StrLength)
then
MsgBox('Section_1:Key_1=' + StrValue, mbInformation, MB_OK);
{ query integer value }
if JSONQueryInteger(FileName, 'Section_1', 'Key_2', 0, IntValue) then
MsgBox('Section_1:Key_2=' + IntToStr(IntValue), mbInformation, MB_OK);
{ query boolean value }
if JSONQueryBoolean(FileName, 'Section_1', 'Key_3', True, BoolValue) then
MsgBox('Section_1:Key_3=' + BoolToStr(BoolValue), mbInformation, MB_OK);
{ write string }
if not JSONWriteString(FileName, 'Section_1', 'Key_1', 'New value!') then
MsgBox('JSONWriteString Section_1:Key_1 failed!', mbError, MB_OK);
{ write integer }
if not JSONWriteInteger(FileName, 'Section_1', 'Key_2', 123) then
MsgBox('JSONWriteInteger Section_1:Key_2 failed!', mbError, MB_OK);
{ write boolean }
if not JSONWriteBoolean(FileName, 'Section_1', 'Key_3', False) then
MsgBox('JSONWriteBoolean Section_1:Key_3 failed!', mbError, MB_OK);
end;
Inno herhangi bir yerel JSON desteği yok, ancak ayrıştırmak gibi değiştirebilirsiniz: (nedeniyle gerekli
Int64
desteğine en son sürümleri birinde) yalnızca Unicode Inno Setup kullanılabileceğini, Not tekrar yazmadan önce normal bir dize. Regexp modülü sizin için en kolay yol ise o zaman bu kadar olsun. – DeannaSadece bilinen bir benzersiz işaretçiyi aramak ve değiştirmek istiyorsanız, 'StringChange' veya' StringChangeEx' işlevini kullanın. Arama metnini benzersiz yapamadığınız sürece normal ifadelere gerek yoktur. – Miral