史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   Windows 10 各種疑難討論專區 (http://forum.slime.com.tw/f112.html)
-   -   VS2005無法偵錯...vista (http://forum.slime.com.tw/thread258367.html)

hikaru05 2010-04-05 11:46 PM

VS2005無法偵錯...vista
 
對於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;
}



所有時間均為台北時間。現在的時間是 10:16 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1