Da steht aus irgendeinem Grund unter 64-Bit irgendwie die
OLE-Funktionalität nicht richtig zur Verfügung.
Retten könnt Ihr es unter WIN64 so:
Delphi-Quellcode:
procedure TImageDataSource.Load;
const
ImagesPath = '
./images/';
var
SR: TSearchRec;
Res: Integer;
I: Integer;
ImagesFilter:
string;
begin
oleInitialize (
NIL);
// HS: ADD + ActiveX to units
I := 0;
// Find all images
ImagesFilter := ImagesPath + '
*.jpg';
Res := FindFirst(ImagesFilter, faAnyFile, SR);
while Res = 0
do
begin
SetLength(FImages, I + 1);
FImages[I] := TBitmap.CreateFromFile(ImagesPath + SR.
Name);
Res := FindNext(SR);
Inc(I);
end;
if Length(FImages) > 0
then
FCurrentIndex := 0
else
FCurrentIndex := -1;
FindClose (sr);
// HS: ADD
end;
Also
ActiveX zum Uses-Abschnitt hinzu und OleInitialize in der Procedure aufrufen.
Ein Aufruf von OleInitialize zur Intialisierung der
Unit reicht nicht, anscheinend gibt es irgendwo zwischendurch an anderer Stelle ein OleUnitialize.
[nur am Rande bemerkt: Findclose habe ich auch hinzugefügt, wird gerne vergessen und führt zu einer Vielzahl von Problemen]
Der Fehler tritt genau hier auf:
Delphi-Quellcode:
class function TCanvasD2D.ImagingFactory: IWICImagingFactory;
begin
if not Assigned(FImagingFactory) then
begin
CoCreateInstance(CLSID_WICImagingFactory, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,
IUnknown, FImagingFactory); // <-- Hier wird unter Win64 immer NIL zurückgeliefert, wenn OLEInitialize zuvor nicht aufgerufen wurde
end;
Result := FImagingFactory;
end;
Im Ergebnis steht dann also keine ImagingFactory zur Verfügung und dann kracht's eben.