2012-09-23 73 views
3

我最近更新爲Visual Studio 2012 Ultimate。我以前使用DirectX 11 2010 SDK編程,並希望繼續使用Visual Studio 2012.但是,我發現VS2012自帶DirectX SDK(在Windows Kit 8.0中),我一直在嘗試遷移我的代碼使用更新版本的d3d11。一切都很順利,直到我嘗試在我的項目中使用效果文件(.fx文件)。我必須使用VS2012編譯DirectX SDK中的Effects11 Sample,並鏈接我的項目中的lib文件。這也很好。但是,當我編譯我的項目時,函數D3DX11CreateEffectFromMemory返回E_NOINTERFACE error (no such interface is supported)。誰能告訴我爲什麼?請注意,我使用的是Windows Kit中的d3d11.lib和DirectX SDK中的d3dx11.lib。也許我不應該混合他們?然而,除了效果文件創建之外,其他所有功能都可以正常工作。在Visual Studio 2012中使用DirectX Effect11

任何幫助,將不勝感激。

P.S.我不知道這是否有幫助,但只是你知道,如果我在"DirectXSDKInstallPath\lib\x86\"的項目設置中添加一個額外的庫目錄,它的工作原理。這是爲什麼?這是否意味着我正在使用舊版本的庫?這將給出大量有關winerror.h中重新定義的標題的警告。

+0

「Visual Studio 2012」不是一種編程語言,它是一種可與多種不同語言結合使用的開發工具。你使用什麼特定的語言?什麼是特定的代碼失敗? –

+0

對不起,應該讓自己更清楚。我使用C++作爲編程語言。具體代碼是D3DX11CreateEffectFromMemory函數(正如vini爲我強調的那樣)。它返回一個「找不到接口」的錯誤。 – l3utterfly

回答

1

D3DX Library已被棄用,用於最新版本的DirectX 11(Windows 8)。請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/bb172965(v=vs.85).aspx

效果現在以不同的方式處理。您可以對自己的庫進行編程以加載特效或使用DirectX工具包(DirectXTK):http://directxtk.codeplex.com/

Microsoft已在其網站上推薦此工具包,請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx以獲取更多信息。

+0

好吧,DirectXTK似乎提供了很多功能。順便說一句,如果任何人有興趣,我決定用獨立的着色器處理所有東西。 – l3utterfly

0

這可能是由於D3D庫衝突造成的。

確保您使用的是d3d庫。因爲有2個不同的d3d庫。

一個在DXSDK_DIR \ Lib \ x86或\ x64中,另一個在c:\ program files(x86?)\ Microsoft SDK中。

如果您使用的是DXSDK,則分別在包含目錄和庫目錄字段中包含libs目錄之前,將$(DXSDK_DIR)Include $(DXSDK_DIR)Lib \ x86傳遞給Microsoft SDKs。

+0

由於使用Windows 8.x SDK,因此使用VS 2012/VS 2013時,重要的是*反轉*這種傳統順序並將Microsoft SDK包含/ lib路徑*在$(DXSDK_DIR)路徑之前。這在[MSDN](http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx)中有詳細介紹。 –

0

在以前的Direct3D版本中,一旦與D3D10庫鏈接後,效果框架即可開箱即用。在Direct3D 11中,效果框架已轉移到D3DX庫中,並且必須包含單獨的頭文件(d3dx11Effect.h)並鏈接到單獨的庫(D3DX11Effects.libfor發佈版本和D3DX11EffectsD.libfor調試版本)。此外,在Direct3D 11中,它們會爲您提供效果庫代碼的完整源代碼(DirectX SDK \ Samples \ C++ \ Effects11)。因此,您可以根據自己的需要修改效果框架。在本書中,我們只會按原樣使用效果框架,不作任何修改。爲了使用該庫,您需要首先在發佈和調試模式下構建Effects11項目以生成D3DX11Effects.lib和D3DX11EffectsD.libfiles;除非更新了效果框架(例如,新版本的DirectX SDK可能會更新這些文件,因此您可能需要重新生成.lib文件以獲取最新版本),否則只需執行一次此操作。 d3dx11Effect。h頭文件可以在DirectX SDK \ Samples \ C++ \ Effects11 \ Inc中找到。

對於我們的示例項目中,我們在d3dx11Effect.h,D3DX11EffectsD.lib,並在Commondirectory D3DX11Effects.libfiles我們所有的項目份額代碼(見「簡介」示例項目組織的描述) 。