![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() ![]() |
|
主題工具 | 顯示模式 |
![]() |
#1 |
註冊會員
|
![]() 對於VS2005裝在vista上,小弟找了不少資訊
也有看到版內類似的帖~http://forum.slime.com.tw/thread209717.html 但多是告知安裝 MicrosoftR Visual StudioR 2005 Team Suite Service Pack 1 再裝 Visual Studio 2005 Service Pack 1 Update for Windows Vista 可這兩個版本載後要安裝卻都出現: 「Windows Installer服務無法安裝升級修補程式,因為待升級的程式已遺失,或者升級修補程式已經更新到不同版本。請確認您要升級的程式已經存在您的電腦上,而且您擁有正確的升級補修程式。」 我使用的版本是Visual C++2005 Express Edition 並有安裝DirectX9 可開啟檔案要執行偵錯時卻都偵錯不能...(此檔案是在課堂上能正常執行的) 時常出現 「fatal error C1083: 無法開啟包含檔案: 'testd3d.h': No such file or directory」 「LINK : fatal error LNK1104: 無法開啟檔案 'winmm.lib'」 「無法啟動程式'c:\User\Desktop\100319\程式專案\Debug\testd3d.exe' 系統找不到指定的檔案。」 「LINK : 最後的累加連結找不到或未建置 Debug/testd3d.exe,正在執行完整連結」 有試過將指令貼在VS2008上來作業,但可能裡面語法有些不同所以也偵錯無法 因為老師教學指定使用VS2005,且小弟是C++的新手... 麻煩各位高手們幫忙解答了!!謝謝。 *以下是執行偵錯的testd3d.cpp 語法:
// testd3d.cpp : 定義應用程式的進入點。 // #include "stdafx.h" #include <d3dx9.h> #include <mmsystem.h> #include "testd3d.h" const int W=640; const int H=640; IDirect3DVertexBuffer9* Cube=0; IDirect3DIndexBuffer9* CubeIdx=0; IDirect3DDevice9* d3dDevice = NULL; // 這個程式碼模組中所包含之函式的向前宣告: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int EnterMsgLoop( bool (*ptr_display)(float timeDelta) ); // // Framework Functions // struct Vertex { Vertex(float x,float y,float z) { _x=x,_y=y,_z=z;} float _x,_y,_z; static const DWORD FVF; }; const DWORD Vertex::FVF=D3DFVF_XYZ; bool Setup() { d3dDevice->CreateVertexBuffer(8*sizeof(Vertex),D3DUSAGE_WRITEONLY, Vertex::FVF,D3DPOOL_MANAGED,&Cube,0); d3dDevice->CreateIndexBuffer(36*sizeof(WORD),D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_MANAGED,&CubeIdx,0); Vertex* p; Cube->Lock(0,0,(void**)&p,0); p[0]=Vertex(-1.0f,1.0f,3.0f); p[1]=Vertex(0.0f,1.0f,2.0f); p[2]=Vertex(0.0f,-1.0f,2.0f); p[3]=Vertex(-1.0f,-1.0f,3.0f); p[4]=Vertex(1.0f,1.0f,3.0f); p[5]=Vertex(0.0f,1.0f,4.0f); p[6]=Vertex(0.0f,-1.0f,4.0f); p[7]=Vertex(1.0f,-1.0f,3.0f); Cube->Unlock(); WORD* pw=0; CubeIdx->Lock(0,0,(void**)&pw,0); pw[0]=2;pw[1]=3;pw[2]=0; pw[3]=1;pw[4]=2;pw[5]=0; pw[6]=7;pw[7]=4;pw[8]=6; pw[9]=4;pw[10]=5;pw[11]=6; pw[12]=1;pw[13]=4;pw[14]=2; pw[15]=7;pw[16]=2;pw[17]=4; pw[18]=0;pw[19]=5;pw[20]=1; pw[21]=4;pw[22]=1;pw[23]=5; pw[24]=7;pw[25]=6;pw[26]=2; pw[27]=3;pw[28]=2;pw[29]=6; pw[30]=0;pw[31]=3;pw[32]=5; pw[33]=6;pw[34]=5;pw[35]=3; CubeIdx->Unlock(); D3DXMATRIX proj; D3DXMatrixPerspectiveFovLH( &proj,D3DX_PI*0.5f,W/H,1.0f,1000.0f); //把矩陣給他 d3dDevice->SetTransform(D3DTS_PROJECTION,&proj); d3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME); return true; } void Cleanup() { Cube->Release(); Cube=0; CubeIdx->Release(); CubeIdx=0; } bool Display(float timeDelta) { if(d3dDevice) { //設定相關變數 static float xDist=5.0f,zDist=5.0f,xMoveDir=1.0f,zRot=0.0f; //建立相關變數 D3DXMATRIX matTran; xDist -= xMoveDir*timeDelta; if(xDist <= -5.0f||xDist >= 5.0f) xMoveDir*=-1.0f; D3DXMatrixTranslation(&matTran,xDist,0.0f,5.0f); d3dDevice->SetTransform(D3DTS_WORLD,&matTran); //建立旋轉矩陣 D3DXMATRIX matRotZ; zRot+=timeDelta; if(zRot>=D3DX_PI*2.0f) zRot=0.0f; D3DXMatrixRotationZ(&matRotZ,zRot); D3DXMATRIX matWorld=matRotZ*matTran; d3dDevice->SetTransform(D3DTS_WORLD,&matWorld); d3dDevice->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0xfffffffffff,1.0f,0); d3dDevice->BeginScene(); d3dDevice->SetStreamSource(0,Cube,0,sizeof(Vertex)); d3dDevice->SetIndices(CubeIdx); d3dDevice->SetFVF(Vertex::FVF); d3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12); d3dDevice->EndScene(); d3dDevice->Present(0,0,0,0); } return true; } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // Create the main window. WNDCLASS wc; int iWidth = 640, iHeight = 480; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName = "Direct3D9App"; if( !RegisterClass(&wc) ) { MessageBox(0, "RegisterClass() - FAILED", 0, 0); return false; } HWND hwnd = 0; hwnd = CreateWindow("Direct3D9App", "Direct3D9App", WS_EX_TOPMOST, 0, 0, iWidth, iHeight, 0 , 0, hInstance, 0); if( !hwnd ) { MessageBox(0, "CreateWindow() - FAILED", 0, 0); return false; } ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); // 測試Direct3D. // Step 1: Create the IDirect3D9 object. IDirect3D9* d3d9 = NULL; d3d9 = Direct3DCreate9(D3D_SDK_VERSION); if( !d3d9 ) { ::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0); return false; } // Step 2: Check for hardware vp. D3DCAPS9 caps; d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, // 使用繪圖卡,而非軟體模擬 &caps); int vp = 0; if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; else vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; // Step 3: Fill out the D3DPRESENT_PARAMETERS structure. D3DPRESENT_PARAMETERS d3dpp; d3dpp.BackBufferWidth = iWidth; d3dpp.BackBufferHeight = iHeight; d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8; d3dpp.BackBufferCount = 1; d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; d3dpp.MultiSampleQuality = 0; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = hwnd; d3dpp.Windowed = true; // 使用視窗模式 d3dpp.EnableAutoDepthStencil = true; d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; d3dpp.Flags = 0; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // Step 4: Create the device. HRESULT hr = d3d9->CreateDevice( D3DADAPTER_DEFAULT, // primary adapter D3DDEVTYPE_HAL, // device type hwnd, // window associated with device vp, // vertex processing &d3dpp, // present parameters &d3dDevice); // return created device if( FAILED(hr) ) { d3d9->Release(); // done with d3d9 object MessageBox(0, "CreateDevice() - FAILED", 0, 0); return false; } d3d9->Release(); // done with d3d9 object if(!Setup()) { MessageBox(0, "Setup() - FAILED", 0, 0); return 0; } EnterMsgLoop( Display ); Cleanup(); d3dDevice->Release(); return 0; } // // 函式: WndProc(HWND, unsigned, WORD, LONG) // // 用途: 處理主視窗的訊息。 // // WM_COMMAND - 處理應用程式功能表 // WM_PAINT - 繪製主視窗 // WM_DESTROY - 傳送結束訊息然後返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } int EnterMsgLoop( bool (*ptr_display)(float timeDelta) ) { MSG msg; ::ZeroMemory(&msg, sizeof(MSG)); static float lastTime = (float)timeGetTime(); while(msg.message != WM_QUIT) { if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } else { float currTime = (float)timeGetTime(); float timeDelta = (currTime - lastTime)*0.001f; ptr_display(timeDelta); lastTime = currTime; } } return msg.wParam; } |
![]() |
送花文章: 0,
![]() |
![]() ![]() |
|
|
![]() |
||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
教學 - Windows Vista 資源共享故障排除 - 無法檢視同一群組的電腦 | Omar Lin | Windows 10 疑難討論 Q & A 精華區 | 2 | 2007-02-07 05:10 PM |
電腦無法偵測到-usb | karl | 硬體疑難使用問題討論區 | 8 | 2004-01-07 05:23 PM |
120G硬碟在USB外接盒上無法偵測到 | disoniner | 硬體疑難使用問題討論區 | 5 | 2003-10-05 04:08 AM |