For reference, looks like it can also fail in VB http://www.vbforums.com/showthread.php?t=477972 with the same reason. Debugging it, I can only say it is a bug in the TLB from DirectX which has the wrong UIID for the Sprite interface. What happens is that the creation of the sprite works, but then for the internal of EiffelCOM we need to query its interface and it fails. The C project you are referring to does not do the check and thus works. I'm not sure how much of DirectX you are actually using, but most of it could be rewritten without using COM, but just a plain C++ encapsulation as it is done in the C project you are referencing. Until we know exactly the UUID for the interface that DirectX is actually generating, there is not much we can do to solve that problem. Have you tried to use a more recent version of DirectX? They might have fixed this problem.