Ok think I've cracked it.
To resolve the IID, I first need to modify some stuff in WinRT_MetaDataLocator (ATM metadatalocator is not correctly handling delegates),
Then,with _WinRT_GetParameterizedTypeInstanceIID:
Windows.Foundation.TypedEventHandler`2<Windows.Media.Playback.MediaPlayer, System.Object> should actually be passed as:
Windows.Foundation.TypedEventHandler`2<Windows.Media.Playback.MediaPlayer, Object>
So long story short - At some point I'll modify _WinRT_CreateDelegate() so we have the ability to create a delegate of a certain "type".
I'm thinking something like:
_WinRT_CreateDelegate("MediaOpen", "TypedEventHandler`2<Windows.Media.Playback.MediaPlayer, Object>")
or if we get that far, I might even generate some constants:
_WinRT_CreateDelegate("MediaOpen", $sIID_TypedEventHandler_2_MediaPlayer_Object)
Then it'll be a matter of shuffling some internals so our delegate can respond to QI requests to its own IID, in addition to IUnknown.
Stay tuned...