最近在vs2015使用dx11,使用了微软提供的Effect11进行shader编译,写代码时还是非常顺利,和dx9x或者dx10x提供方法一样非常方便,但是到编译运行时,D3DX11CompileEffectFromMemory报出返回E_NOITERFACE的错误结果。
网上找方法解决,发现国外一网站有人问出这个问题,但是和我的情况不一样,(问题连接:https://stackoverflow.com/questions/30579016/d3d11-d3dx11createeffectfrommemory-returns-e-noiterface),
自己的情况:由于项目中默认是引用了C:\Program Files (x86)\Windows Kits\8.1\里面的LIB库和include目录和自己又加上了C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)里面的LIB库和include目录,这两个目录里面都有Dx11相关的文件。
而我是在vs2015上编译的Effect11,默认使用的是C:\Program Files (x86)\Windows Kits\8.1\这里面的文件。所以自己使用Effect11时出现E_NOITERFACE的错误,这是由于程序在连接时使用了C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)的文件导致的错误,具体原因不太清楚,
因此将C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)里面的LIB库和include目录引用删除时,再进行编译应该就Ok了。
在找资料过程中发现微软在github的开源库中有使用Effect11的例子(https://github.com/walbourn/directx-sdk-samples)例子为Direct3D11TutorialsFX11文件下的。当下载编译发现能运行。