Hmm, I had the standard methods also defined in my struct and it worked. Dunno why it crashes for you. In the d3d9.h header there are lots of those interfaces and they all have the standard methods included. I needed them also because I call Release().

You use the preinitialized GUID for the first parameter when you call CoCreateInstance.

I have not yet had a BSTR but believe it is not a char* but a struct similar to CString. In that case your typedef chain would not work.