Bitte sehr:
Delphi-Quellcode:
type
TAccessStatusCompletedHandler = class(TInspectableObject,
AsyncOperationCompletedHandler_1__GeolocationAccessStatus_Delegate_Base,
AsyncOperationCompletedHandler_1__GeolocationAccessStatus)
private
FEvent: TAccessStatusCompletedHandlerCompleted;
public
procedure Invoke(asyncInfo: IAsyncOperation_1__GeolocationAccessStatus; asyncStatus: AsyncStatus); safecall;
constructor Create(AEvent: TAccessStatusCompletedHandlerCompleted);
end;
Beim Debuggen der Zuweisung
AsyncOperation.Completed := CompletedHandler;
kommt man in
TInterfacedObject.QueryInterface
raus:
Code:
System.TInterfacedObject.QueryInterface((4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113)),(no value))
:76d2de72 combase.RoGetAgileReference + 0x62
:77b6272b ; C:\Windows\SysWOW64\Geolocation.dll
:77b742e1 ; C:\Windows\SysWOW64\Geolocation.dll
:77b7637d ; C:\Windows\SysWOW64\Geolocation.dll
Unit9.TForm9.Button3Click($43A6380)
Hier wird nach der
IID = (4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113))
gefragt, was als bekannte Hex(-String) Darstellung dem hier entspricht:
'{F3524C93-E5C7-5B88-BEDB-D3E637CFF271}'
.
Das wiederrum ist in
Winapi.Devices.Geolocation das Interface
AsyncOperationCompletedHandler_1__GeolocationAccessStatus_Delegate_Base
.
Lessons Learned:
1. Debug-
DCU einschalten.
2. Trace into (F7) Debugging nutzen.
3. Bei (
COM-)Interface-Geschichten im Zweifelsfall ruhig auch das Eltern-Interface mit in die Klasse ziehen, auch wenn keine Methoden darin definiert sind.