Du kannst von Ausserhalb einer
ActiveX-
DLL nur Interfaces erzeugen für die es auch eine CoClass gibt.
Es kann dann viele weitere Interfaces geben, an die du aber nur indirekt herankommst.
Dazu gibt es zwei Möglichkeiten:
1.) über eine Funktion bekommst du den Interface-Zeiger eines anderen Objekts.
ein kleines (fiktive) Beispiel:
Delphi-Quellcode:
var
winlist : IWindowList;
win : IWindow;
i : integer;
begin
winlist := CoWindowList.Create;
for i:=0 to winlist.count-1 do
begin
// hier passierts: winlist gibt dir quasi "freiwillig" einen Interface-Zeiger auf ein anderes Objekt
win := winlist.Items[i];
end;
2.) über Umwandlung des Interface in einen anderen Typ
Delphi-Quellcode:
var
winlist : IWindowList;
x : IIEWindowList3;
begin
winlist := CoWindowList.Create;
x := winlist as IWindowList3
Man kann also ein Interface in ein anderes Interface eintauschen.
Delphi ruft dazu verborgen im Hintergrund die Methode QueryInterface() auf.
In deinem Fall bestehen sehr gute Chancen, dass du ein IXRawfile Interface problemlos in ein IXRawfile4 umwandeln kannst.