我已经安装了2010年6月的Direct X SDK并编写了一个简单的DX应用程序。
我设置了正确的标题包含和库包含路径,即它们指向
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86
一切都很好,但是当我运行应用程序时,我注意到正在加载的d3d *模块是C:\Windows\SysWOW64\d3d9.dll
& C:\Windows\SysWOW64\d3dx9d_43.dll
我假设在DirectX SDK目录中与libs链接将确保SDK中的dll,即C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Developer Runtime\x86
将被加载。
我不确定它是否与此相关,但我的应用程序最终得到NULL
设备句柄。
如何确保加载正确的DLL?
答案 0 :(得分:1)
DXSDK_DIR=C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)
添加到环境"%DXSDK_DIR%\Developer Runtime\x86"
和"%DXSDK_DIR%\Developer Runtime\x64"
添加到系统PATH
变量中。 %DXSDK_DIR%\Utilities\bin\x86\dxcpl.exe
和%DXSDK_DIR%\Utilities\bin\x64\dxcpl.exe
)启用调试运行时#define D3D_DEBUG_INFO
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D
和HKEY_CURRENT_USER\SOFTWARE\Microsoft\Direct3D
。但很可能它不起作用(在Windows 7上比Windows 7更新),因为DirectX 9不久前被弃用了,最近一些更新打破了所有旧的东西(甚至是好的'PIX')。我听说过另外一个选项:使用已检查版本的Windows,但没有尝试过。参考文献:
答案 1 :(得分:0)
关于System32和SysWOW64
'System32'文件夹用于64位文件,'SysWOW64'文件夹用于32位文件
它听起来很混乱,特别是对于文件夹名称,这是由于向后的可比性。有关详细信息,请阅读The 'Program Files (x86)' and 'SysWOW64' folders explained。事实上,您正在64位Windows上构建32位DirectX应用程序。它将使用SysWOW64的32位dll。
我不确定它是否与此相关,但我的申请结束了 获取NULL设备句柄
我确信这与dll位无关,你应该检查CreateDevice函数的返回值,看看发生了什么。
如何让我的应用程序加载正确的dll?
我认为你不需要自己做,系统会为你处理大部分情况,如果你真的想自己做,请看看Dynamic-Link Library Search Order。
关于SO的相关帖子