史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > Windows 10 各種疑難討論專區
忘記密碼?
註冊帳號 論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2010-04-05, 11:46 PM   #1
hikaru05
註冊會員
榮譽勳章

勳章總數
UID - 338305
在線等級: 級別:0 | 在線時長:0小時 | 升級還需:5小時
註冊日期: 2010-04-04
文章: 1
精華: 0
現金: 1 金幣
資產: 1 金幣
預設 求助 - 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;
}
hikaru05 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
發文 回覆


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
教學 - Windows Vista 資源共享故障排除 - 無法檢視同一群組的電腦 怡紅公子 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


所有時間均為台北時間。現在的時間是 04:57 PM


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


SEO by vBSEO 3.6.1