win7 64位系统VS2012 链接DIRECTX SDK函数出错系统:win7 64位VS2012, directx sdk june 2010出错信息:引用
win7 64位系统VS2012 链接DIRECTX SDK函数出错
系统:win7 64位
VS2012, directx sdk june 2010
出错信息:
win32项目,vs2012自动产生项目后,编译运行正常,在_tWinMain函数增加Direct3DCreate9调用后就出错了。
#include "stdafx.h"
#include "Win32Project1.h"
#include "d3d9.h"
#include "d3dx9.h"
#define MAX_LOADSTRING 100
//#pragma comment(lib, "d3d9.lib")
//#pragma comment(lib, "d3dx9.lib")
// 全局变量:
HINSTANCE hInst;// 当前实例
TCHAR szTitle[MAX_LOADSTRING];// 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];// 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOMMyRegisterClass(HINSTANCE hInstance);
BOOLInitInstance(HINSTANCE, int);
LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
hInstance = GetModuleHandle(NULL);
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIN32PROJECT1, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));
LPDIRECT3D9 g_pD3D = NULL;
if( NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
经过以下工程属性确认:
可执行目录 :$(DXSDK_DIR)\Utilities\bin\x64;$(ExecutablePath)
包含目录: $(DXSDK_DIR)\include;$(IncludePath)
库目录: $(DXSDK_DIR)\Lib\x64;$(LibraryPath)
预处理器定义 :WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
链接器子系统:窗口 (/SUBSYSTEM:WINDOWS)
后来又增加:
附加依赖项: $(DXSDK_DIR)\lib\x64\d3d9.lib;%(AdditionalDependencies)
附加库目录: $(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories)
而且确认了:D:\Program Files\Microsoft DirectX SDK (June 2010)\Include目录确实有包含的头文件,D:\Program Files\Microsoft DirectX SDK (June 2010)\Lib\x64确实有d3d9.lib文件和d3dx9.lib文件,VS2012环境变量可确认$(DXSDK_DIR)确实表示D:\Program Files\Microsoft DirectX SDK (June 2010)\。也试过增加
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
也试过改用x86的lib,结果都是一样的错误。
寻求解答。
[解决办法]VS2012本来就带DirectX11啊,不用配置任何东西就应该能找到d3d9.lib(不过没有d3d9x.lib,因为现在改用DirectXMath了)
另外如果有可能的话还是直接学D3D11吧。d3d9某种意义上也算是个历史符号了。
[解决办法]在Win64下:
64位dll在c:\windows\system32目录下;
32位dll在c:\windows\syswow64目录下.
同理,lib也需要区分是32位还是64位。
[解决办法]项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项
项目、属性、链接器、附加库目录:填写附加依赖库所在目录 分号间隔多项
项目、属性、链接器(点前面的+展开)、输入、附加依赖项:填写附加依赖库的名字.lib 空格间隔多项
[解决办法]不知道楼主的问题解决没,我今天也遇到一样的问题,也是64位系统,连接错误,后来我把附加依赖库改成x86的那个,就解决问题了。