Unfortunately the same problem as with solid 7-Zip or Rar happens:
I can't and don't want to unpack each file in ProcessFile(), as this would read parts of the archive all over again and'd be horribly slow.
Therefore I collect all files to unpack and decompress them all in CloseArchive(), just like Christian suggested here.
Since ZPAQ is slow, I want to be able to abort operations and display progress via ProcessDataProc. Unfortunately it doesn't work in CloseArchive().
From the WCX interface help file:
But it just doesn't work, no matter if I return a zero or negative value, and/or some valid custom string!Set Size to the number of bytes processed since the previous call to the function. For plugins which unpack in CloseArchive: Set size to negative percent value (-1..-100) to directly set first percent bar, -1000..-1100 for second percent bar (-1000=0%).
And yes, calling the function in ProcessFile() works (same pointer address).
So my questions are:
a) Why does the Callback function not work for me in CloseArchive, despite the documentation? What are the limiting factors? (I'm using the wide/Unicode function)
b) What is the reason that I can't send the progress dialog to background? (yes, BACKGROUND_UNPACK is set)
My impression is that I need to call ProcessDataProc at least once, but: see a)
c) Is there any special reason why there is STILL a -1 (or 0xFFFFFFFF) returned as Handle address in SetProcessDataProc(W)() when not using list or unpack?
See here (that thread is nearly 12(!) years old now).
It also took me nearly an hour until I found this in debug mode, and the wcx guide STILL says nothing about it.
(sorry, but you either use a null pointer or a valid address, but definitely not 0xFFFFFFFF)