Hallo...
Ich möchte ein dynamisches Array über eine Schleife füllen. Für die Demo wird die Schleifenvariable als String in den Parameter geschrieben.
Delphi-Quellcode:
function TGhostscript.PDFMerge(FileName: string; FileList: TStrings): Boolean;
var
Parameters: array of PAnsiChar;
InitError: Integer;
procedure CreateMergeFiles;
var
I: Integer;
begin
for I := 0 to FileList.Count - 1 do
begin
Parameters[I + 6] := PAnsiChar(IntToStr(I));//PAnsiChar(AnsiString(FileList[I]));
end;
end;
begin
if FDLLHandle = 0 then
begin
if not LoadDLL(FDLLPath) then
begin
Result := False;
Exit;
end;
end;
try
SetLength(Parameters, FileList.Count + 6);
Parameters[0] := '';
Parameters[1] := '-dNOPAUSE';
Parameters[2] := '-dBATCH';
Parameters[3] := '-dPDFSETTINGS=/ebook';
Parameters[4] := '-sDEVICE=pdfwrite';
Parameters[5] := PAnsiChar(AnsiString('-sOutputFile=' + FileName));
// Parameters[6] := PAnsiChar(AnsiString(FileList[0]));
// Parameters[7] := PAnsiChar(AnsiString(FileList[1]));
// Parameters[8] := PAnsiChar(AnsiString(FileList[2]));
// Parameters[9] := PAnsiChar(AnsiString(FileList[3]));
CreateMergeFiles;
Ergebnis nach jedem Schleifendurchlauf:
1:
[6] = 0
[7] = nil
[8] = nil
[9] = nil
I = 0
2:
[6] = 1
[7] = 1
[8] = nil
[9] = nil
I = 1
3:
[6] = 2
[7] = 2
[8] = 2
[9] = nil
I = 2
3:
[6] = 3
[7] = 3
[8] = 3
[9] = 3
I = 3
Wenn ich die Parameter hard codiere (auskommentierter Text):
[6] = 0
[7] = 1
[8] = 2
[9] = 3
Erleuchtet mich mal. Ist normalerweise das 1*1 ... Arrays.
Was ich schon probiert habe (ohne Erfolg):
* Index des Parameters in der Schleife extern berechnet
* Mit jedem Schleifendurchlauf Array um 1 vergrößert
* Schleife rückwärts
* Parameter als private Variable
* Übergabe als var Parameter an CreateMergeFiles
* Optimierung EIN/AUS
...
PS: Einen Delphi Entwickler habe ich schon geschockt...
Er konnte es auch nicht verstehen!