Program wurde mit Code 0x0 beendet
-
Hi!
Ich habe ein Problem nämlich habe ich das kleine C++ Programm unten geschrieben um ein Mesh zu laden.
beim compilimieren kommt aber immer folgende Meldung in VC++ 2008 Express:
Das Programm "[1432] Game Engine.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.Der Code lautet wie folgt:
#include <stdio.h>
#include <stdarg.h>
#include <windows.h>
#include <commctrl.h>
#include <d3dx9.h>
#include <dsound.h>
#include <dinput.h>
#include "resource.h"
#include <d3d9.h>
#include <d3dx9math.h>
#include "directx_api.h"
#include "engine_mesh.h"HINSTANCE game_instance;
HWND game_window;int directx_api::init()
{
D3DDISPLAYMODE d3ddm;
D3DDEVTYPE devtype;
D3DCAPS9 caps;d3d = Direct3DCreate9( D3D_SDK_VERSION);
if( !d3d)
return 0;
if( d3d->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm) < 0)
return 0;
ZeroMemory( &d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.BackBufferFormat = d3ddm.Format;
if(d3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps)<0)
{
MessageBox( game_window, "Kein HAL Device", "Game Meldung",
MB_OK | MB_ICONWARNING | MB_SETFOREGROUND);
devtype = D3DDEVTYPE_REF;
}
else
devtype = D3DDEVTYPE_HAL;
if( d3d->CreateDevice( D3DADAPTER_DEFAULT, devtype, game_window, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &device) < 0)
return 0;
return 1;
}void directx_api::adjust(int width, int height)
{
D3DXMATRIX proj;d3dpp.BackBufferWidth = width;
d3dpp.BackBufferHeight = height;
device->Reset( &d3dpp);
device->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE);
device->SetRenderState( D3DRS_AMBIENT, 0xffffff);
D3DXMatrixPerspectiveFovLH( &proj, D3DX_PI/4, ((float)width)/height, 1.0f, 500.0f);
device->SetTransform( D3DTS_PROJECTION, &proj);
}
directx_api my_directx;
cMesh::cMesh()
{
mesh = NULL;
materials = NULL;
num_mat = 0;
textures = NULL;
}
void cMesh::load( char xfile)
{
LPD3DXBUFFER buf;
D3DXMATERIAL mat;
DWORD i;D3DXLoadMeshFromX( "saebel.x", D3DXMESH_SYSTEMMEM, my_directx.device, NULL, &buf, NULL, &num_mat, &mesh);
mat = (D3DXMATERIAL*)buf->GetBufferPointer();
materials = new D3DMATERIAL9[num_mat];
textures = new LPDIRECT3DTEXTURE9[num_mat];
for( i=0; i<num_mat; i++)
{
materials[i] = mat[i].MatD3D;
materials[i].Ambient.r = 1.0f;
materials[i].Ambient.g = 1.0f;
materials[i].Ambient.b = 1.0f;
if( D3DXCreateTextureFromFile( my_directx.device, mat[i].pTextureFilename, &textures[i]) < 0)
textures[i] = NULL;
}
buf->Release();
}cMesh::~cMesh()
{
unsigned int i;
if( materials)
delete[] materials;if( textures)
{
for( i = 0; i < num_mat; i++)
{
if( textures[i])
textures[i]->Release();
}
delete[] textures;
}
if( mesh)
mesh->Release();
}void cMesh::draw()
{
unsigned int i;
for( i=0; i < num_mat; i++)
{my_directx.device->SetMaterial( &materials[i]);
my_directx.device->SetTexture( 0, textures[i]);
mesh->DrawSubset( i);}
}cMesh IMesh;
int cMesh::init()
{
if( !my_directx.init())
return 0;
IMesh.load("saebel.x");
return 1;
}LRESULT CALLBACK game_windowhandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch( msg)
{
case WM_COMMAND:
switch( LOWORD(wParam))
{case IDM_EXIT:
PostMessage( hWnd, WM_CLOSE, 0, 0);
return 0;
}
break;
case WM_DESTROY:
PostQuitMessage( 0);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
};int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmddLine, int nCmdShow )
{
MSG msg;
HACCEL acc;
WNDCLASSEX wcx;
game_instance = hInst;wcx.cbSize = sizeof( wcx);
wcx.lpszClassName = "Game";
wcx.lpfnWndProc = game_windowhandler;
wcx.style = CS_VREDRAW | CS_HREDRAW;
wcx.hInstance = hInst;
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcx.hIcon = LoadIcon(hInst, MAKEINTRESOURCE( IDI_BALANCE));
wcx.lpszMenuName = MAKEINTRESOURCE( IDR_MENU);
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
if ( !RegisterClassEx( &wcx))
return 0;acc = LoadAccelerators(hInst, MAKEINTRESOURCE( IDR_ACCEL));
game_window = CreateWindowEx(0, TEXT( "Game"), TEXT( "Game"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);if( !game_window )
return 0;
ShowWindow( game_window, nCmdShow);
while( TRUE)
{
if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE))
{
if( TranslateAccelerator( game_window, acc, &msg) == 0)
{
TranslateMessage( &msg);
DispatchMessage( &msg);
}
}
}return 0;
}Die Includes sind alle richtig, die hab ich nem Buch entnommen. Weiß jemand von euch eine Lösung??
danke schon jetzt
chrissi
-
Nun der Exitcode 0x0 zeigt in der Regel an, daß dein Program normal beendet wurde. Du solltest jetzt mal den debugger bemühen und die Stelle eingrenzen bis zu der das ganze noch läuft. Du kannst auch die code-tags benutzen, da wird dein Quelltext für andere um einiges lesbarer
-
ok danke für den hinweis
ich werds so machen..