Am just wondering why UNICODE version of ::D3DXCreateEffectFromFile and ::D3DXCompileShaderFromFile and other effects and shader compiling functions exist. By default VStudio 2005 compiles project in UNICODE format so I had to typecast (LPCSTR) some/a params of those two APIs and LPCSTR is ANSI for eg, entry point function name in ::D3DXCompileShaderFromFile. Even in it's UNICODE version it's takes LPCSTR as argument. So I typecasted LPCSTR to a param that takes LPCSTR as argument and compile the project in UNICODE format and the shader wouldn't just compile...
Microsoft is pro-UNICODE and anti-ANSI. Every bt of MS code I've ever seen has been in UNICODE and since they promote it, you can expect them to use only UNICODE in their API's as well. This is one reason I prefer OpenGL and OpenAL.