2009/1/21 Stefan Dösinger stefan@codeweavers.com:
I don't see the point. IDirect3DDevice7 is the primary vtable and that's not going to change, ever. We also do things like this about everywhere else, and I don't think ddraw should be special in that regard.
I don't see any 'primary' vtable in any ddraw object, but that's just my personal view. I also dislike casting between the iface and the impl, which is possible only because vtable is the first member of the impl struct.
Primary in the sense that it is the table that actually implements most of the methods, including things like QueryInterface(), rather than forwarding them to somewhere else.
My impression was that whenever we have different vtables in an object that there are converter functions from and to all ifaces and no iface is obtained by casting. Of course if we have some policy or enough code to prove my point here wrong please disregard the objection.
Just open a random COM object implementation like eg. dlls/shell32/shlview.c or dlls/comdlg32/filedlgbrowser.c.