Problem z debugowaniem, system 64 bit

0

Witam borykam się z pewny problemem, zalinkowałem d3d9.lib i d3dx9.lib, do folderu instalacyjnego VS2012 w którym jest miejsce na lib i include, dodałem je z Directx SDK. I wybrałem wersje lib-ów x64.
Nie wiem co robie źle, to source:

#include <d3dx9.h>
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "d3dx9.lib")

IDirect3D9* pD3D;
IDirect3DDevice9* pDev;

HWND hWnd;

void InitWindow()
{
	HINSTANCE hProg = GetModuleHandle(0);
	WNDCLASS wc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hProg;
	wc.lpfnWndProc = DefWindowProc;
	wc.lpszClassName = L"WndClass";
	wc.lpszMenuName = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wc.hIcon = LoadIcon(hProg, IDI_WINLOGO);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.hCursor = LoadCursor(hProg, IDC_ARROW);

 	RegisterClass(&wc);
	hWnd = CreateWindowEx(0, L"WndClass", L"Lekcja 3", WS_OVERLAPPEDWINDOW,
  		0, 0, 800, 600, 0, 0, hProg, 0);

	ShowWindow(hWnd, 5);
	
}

struct OurVertex
{
	float x, y, z; // pozycja
	float rhw; // komponent rhw
	D3DCOLOR color; // kolor
};

const DWORD OURVERT_FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;

IDirect3DVertexBuffer9* pVB;

bool Run = true;

int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	InitWindow();
	
	pD3D = Direct3DCreate9(D3D_SDK_VERSION);

	D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	d3dpp.Windowed = true;
	d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
	
	pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
		D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDev);

	OurVertex verts[] =
	{
		{ 200.0f, 500.0f, 0.5f, 1.0f, 0xffff0000,},
        { 400.0f, 100.0f, 0.5f, 1.0f, 0xff00ff00,},
		{ 600.0f, 500.0f, 0.5f, 1.0f, 0xff0000ff},
	};

	pDev->CreateVertexBuffer(sizeof(verts),
		D3DUSAGE_DYNAMIC, OURVERT_FVF, D3DPOOL_DEFAULT, &pVB, 0);

	void* data;

	pVB->Lock(0, 3*sizeof(OurVertex), &data, D3DLOCK_DISCARD);

	memcpy(data, (void*)verts, sizeof(verts));

	pVB->Unlock();

	MSG msg;
	while(Run)
	{
		if (PeekMessage(&msg, 0, 0U, 0U, PM_REMOVE))
		{
			if (msg.message == WM_DESTROY) break;
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			pDev->Clear(0, 0, D3DCLEAR_TARGET, 0xff000000, 1, 0);
			pDev->BeginScene();
			
			pDev->SetFVF(OURVERT_FVF);
			pDev->SetStreamSource(0, pVB, 0, sizeof(OurVertex));
			pDev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

			pDev->EndScene();
			pDev->Present(0, 0, 0, 0);
			if (GetKeyState(VK_ESCAPE) & 0x0800)
			{
				Run = false;
			}
		}
	}
    pDev->Release();
    pD3D->Release();
}

A errory jakie mi wywala to:

Error 1 error LNK2001: unresolved external symbol _Direct3DCreate9@4
Error 2 error LNK1120: 1 unresolved externals

A na Google jedyne co znalazłem to porady że trzeba za linkować i takie pierdoły no ale to jak już wyżej napisałem zostało zrobione.

Proszę o pomoc.

0

Kierowany tym że mam 64 bitowy system dodałem 64 bitowe biblioteki itd. , zaciekawiło mnie to że w środowisku building jest ustawiony na win32 więc dałem na architekturę x64 powił się inny error że nie może otworzyć d3d9.lib więc to już jakiś postem, i wpadłem na pomysł aby po prostu wrócić z powrotem do Win32 ale za linkować x86(32) biblioteki i podziałało :D

Jakbym chciał kompilować na architekturę x64 to wystarczy podmienić biblioteki na x64 ? czy może być inny interfejs Directx i jego moduły?

0

do folderu instalacyjnego VS2012 w którym jest miejsce na lib i include, dodałem je z Directx SDK

Co to znaczy „dodałeś”? Skopiowałeś pliki?
Pewnie nie te co trzeba albo nie tam gdzie trzeba.
Zepsułeś sobie instalację. Nie wolno nic dodawać do katalogów visuala. Zamiast tego, w opcjach projektu trzeba dodać ścieżki do katalogów z DirectX SDK. Co dokładnie tam wpisać, to wygóglaj.

0

witam, wczoraj chciałem pobawić się directx'em troszkę ale napotkałem przeszkodę w owym fragmencie kodu:

    pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
                D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDev);

otóż przy devtype_hal nie przypisuje nic do wskaźnika na urządzenie, przypisuje tylko jak podstawiam D3DDEVTYPE_NULLREF ale i tak nie rysuje nic na "formie" ( ;p ) , jakiś problem z dostępem do zasobów karty graficznej?
poradzi ktoś coś? jeśli chodzi o directx'a to jestem zielony ale prosze bez takich odpowiedzi zeby poczytal cos tam, albo zaczal od podstaw czegos tam, proszę o konkret ;p visual studio 2012, directx sdk 10, winda 7

0
innos napisał(a):

witam, wczoraj chciałem pobawić się directx'em troszkę ale napotkałem przeszkodę w owym fragmencie kodu:

    pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
                D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDev);

otóż przy devtype_hal nie przypisuje nic do wskaźnika na urządzenie, przypisuje tylko jak podstawiam D3DDEVTYPE_NULLREF ale i tak nie rysuje nic na "formie" ( ;p ) , jakiś problem z dostępem do zasobów karty graficznej?
poradzi ktoś coś? jeśli chodzi o directx'a to jestem zielony ale prosze bez takich odpowiedzi zeby poczytal cos tam, albo zaczal od podstaw czegos tam, proszę o konkret ;p visual studio 2012, directx sdk 10, winda 7

sory, cos musialo byc zle w moim kodzie, wkleilem to co w tym top poscie i dziala, rysuje trójkąk, będę analizował gdzie błąd w takim razie, mozliwe ze wynika to z mojej slabej znajomosci winapi ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1