Code: Select all
public function ExtractEmbeddedFile(FileIdx: Integer; var Data: array of Byte): GdPictureStatus;
Code: Select all
function ExtractEmbeddedFile(FileIdx: Integer; var Data: PSafeArray): GdPictureStatus; safecall;
Please tell me: How I can use the function ExtractEmbeddedFile that it fill the Content of an enbedded file in a stream? How i must handled the PSafeArray.
Best regards
Dirk
PS: Source code:
Code: Select all
function TccXMPPartWriterPDF_GDP.xTractEmbededFilesByType(path, fileName: String): TFileStream;
var
count : integer;
i : Integer;
fileStream : TFileStream;
byteArray :TBytes;
saveArrayV : variant;
saveArrayS : PSafeArray;
function SafeArrayToBytes(const si: PSafeArray): TBytes;
var
nLow, nHigh, nSize: integer;
pData: Pointer;
begin
//Copy from Variant Array to Delphi array
SafeArrayGetLBound(si, 1, nLow);
SafeArrayGetUBound(si, 1, nHigh);
nSize := SafeArrayGetElemsize(si);
SetLength(Result, nSize * (nHigh - nLow + 1));
SafeArrayAccessData(si, pData);
CopyMemory(@Result[1], pData, Length(Result));
SafeArrayUnaccessData(si);
end;
begin
fileStream := nil;
if gdPicturePDFSourceOrg.LoadFromFile(path, False) = GdPictureStatus_OK then
begin
count := self.gdPicturePDFSourceOrg.GetEmbeddedFileCount;
for i := 0 to count-1 do
begin
if TccStrings.equalsExW(gdPicturePDFSourceOrg.GetEmbeddedFileName(i),fileName,true,true,true,true) then
begin
//----------------- ERROR ON NEXT LINE --------------------------------------------------------------------------------------
if self.gdPicturePDFSourceOrg.ExtractEmbeddedFile(i,saveArrayV) = 0 then
begin
saveArrayS := PSafeArray(TVarData(saveArrayV).VArray);
byteArray := SafeArrayToBytes(PSafeArray(saveArrayS));
fileStream.Write(byteArray,length(byteArray));
result := fileStream;
end;
end;
end;
end;
end;