Nabend,
folgendes Problem. Ich spiele gerad mit DirectX herum und möchte einen kleinen Teapot rendern, ohne großen Aufwand. Sollte ja eigentlich kein Problem sein, aber VC++ meldet mir einfach einen blöden Fehler bei meiner eignene Funktion. Hier die einzelnen Dateien:

BasicD3DHeader.h

Code:
#include <d3d9.h>
#include <d3dx9.h>

#define SAFE_RELEASE(x) if (x != NULL) {x->Release(); x = NULL;}
#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 1024

#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")


class BasicD3D
{
private:

	LPDIRECT3DDEVICE9 m_D3DDevice;
	LPDIRECT3D9 m_pD3D;
	LPD3DXMESH m_D3DMesh;

public:

	//Konstruktor
	BasicD3D();

	//Basic Funktionen
	void BeginScene (void);
	void EndScene (void);
	void CleanUpD3D (void);
	void InitD3D(HWND hwnd);

	//Graphics
	void RenderAct (void);
};


HWND CreateMainWindow(HINSTANCE hInstance);

BasicD3DHeader.cpp

Code:
#include "BasicD3DHeader.h"

HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass =
    {
        sizeof(WNDCLASSEX),                                 // Größe angeben
        CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW,    // Standardstile
        DefWindowProc,                                     // Callback-Funktion
        0,                                                  // Zusätzliche Angaben
        0,                                                  // nicht benötigt
        hInstance,                                          // Anwendungsinstanz
        LoadIcon(NULL, IDI_WINLOGO),                        // Windows-Logo
        LoadCursor(NULL, IDC_ARROW),                        // Normaler Cursor
        (HBRUSH)GetStockObject(BLACK_BRUSH),                // Weißer Pinsel
        NULL,                                               // kein Menü
        "WindowClass",                                      // Der Name der Klasse
        LoadIcon(NULL, IDI_WINLOGO)                         // Windows Logo
    };


    RegisterClassEx(&wndClass);

    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
                          "WindowClass",          // Klassenname
                          "DX Test",     // Fenstertitel
                          WS_OVERLAPPEDWINDOW |   // Fenster
                          WS_VISIBLE,             // Eigenschaften
                          0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,         // Anfangsposition und Größe
                          NULL,                   // Handle des Elternfensters
                          NULL,                   // Handle des Menüs
                          hInstance,              // Anwendungsinstanz
                          NULL);                  // wird nicht benötigt
}

void BasicD3D::InitD3D(HWND hwnd)
{
	D3DPRESENT_PARAMETERS PParams;
	ZeroMemory(&PParams, sizeof(D3DPRESENT_PARAMETERS));
	PParams.BackBufferFormat = D3DFMT_UNKNOWN;
	PParams.BackBufferWidth = SCREEN_WIDTH;
	PParams.BackBufferHeight = SCREEN_HEIGHT;
	PParams.BackBufferCount = 1;
	PParams.MultiSampleType = D3DMULTISAMPLE_NONE;
	PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
	PParams.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
	PParams.Windowed = true;

	m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_MIXED_VERTEXPROCESSING, &PParams, &m_D3DDevice);
	m_D3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

	D3DXCreateTeapot(m_D3DDevice, &m_D3DMesh, NULL);
}

BasicD3D::BasicD3D()
{
    m_pD3D = NULL;
    m_D3DDevice = NULL;
	m_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
}

void BasicD3D::CleanUpD3D()
{
	SAFE_RELEASE(m_pD3D);
	SAFE_RELEASE (m_D3DDevice);
	SAFE_RELEASE (m_D3DMesh);
}

void BasicD3D::BeginScene(void)
{
	m_D3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
	m_D3DDevice->BeginScene();
}

void BasicD3D::EndScene(void)
{
	m_D3DDevice->EndScene();
	m_D3DDevice->Present(NULL, NULL, NULL, NULL);
}

void BasicD3D::RenderAct(void)
{
	D3DXMATRIX matView;
	D3DXMATRIX matProjection;
	D3DXMATRIX matRotateY;

	static float index = 0.0f; index+=0.03f;    // an ever-increasing float value

	D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3 (0.0f, 3.0f, 6.0f), &D3DXVECTOR3 (0.0f, 0.0f, 0.0f), &D3DXVECTOR3 (0.0f, 1.0f, 0.0f));    
	D3DXMatrixRotationY(&matRotateY, index);
	D3DXMatrixPerspectiveFovLH(&matProjection, D3DXToRadian(45), (FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, 1.0f, 100.0f);  

	m_D3DDevice->SetTransform(D3DTS_VIEW, &matView);
    m_D3DDevice->SetTransform(D3DTS_PROJECTION, &matProjection);
	m_D3DDevice->SetTransform(D3DTS_WORLD, &(matRotateY));

	m_D3DMesh->DrawSubset(0);
}
Main.cpp

Code:
#include "BasicD3DHeader.h"

MSG msg;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

	//D3D Variablen
	BasicD3D Direct3D;
	
	//Normal Variablen
	HWND hwnd;

	hwnd = CreateMainWindow(hInstance);
	Direct3D.InitD3D(hwnd);
	
	while(msg.message != WM_QUIT)
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			Direct3D.BeginScene();
			
			if(GetAsyncKeyState(VK_ESCAPE) & 0x8000)
			{
				PostQuitMessage(0);
			}

			Direct3D.RenderAct();
			Direct3D.EndScene();
		}
	}
	Direct3D.CleanUpD3D();
	return 0;
}

LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
             break;

        case WM_KEYDOWN:
               switch(wParam)
               {
                 case VK_ESCAPE:
                         DestroyWindow(hwnd);
						 break;
               }
             break;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
Folgenden Error meldet VC++ 2005 Express:

error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall BasicD3D::RenderAct(void)" (?RenderAct@BasicD3D@@QAEXXZ)" in Funktion "_WinMain@16".
Edit3, jetzt gehts doch wieder, wenn ich
Code:
Direct3D.RenderAct()
auskommentiere, ich bitte um Hilfe.

Ich verstehe auch den Linker Error nicht. Benutzt die Funktion vielleicht Elemente die in einer anderen Lib liegen? d3d9 und d3dx9 habe ich doch gelinkt.


[SOLVED]
Gott weiß woran es lag. Neues Projekt gemacht, Dateien neu eingefügt, alles läuft.