DirectX 8 und .NET



  • Hi
    Ich programmiere gerade für einen etwas älteren Computer ein Spiel und schreibe es deswegen DirectX 8. Ich verwende .NET was sich jetzt leider nicht mehr ändern lässt. Mein Problem ist jetzt, dass ich versuche ein ID3DXFont Objekt zu erstellen und es wird leider immer eine Exception entworfen. Ich denke, dass es ein Problem, irgendwo in der Kombination von managed und unmanaged Code gibt. Naja das hier ist der Code zum erstellen des Devices. Die Parameter des Devices stimmen und er bringt auch keinen Fehler.

    m_D3D8 = Direct3DCreate8(D3D_SDK_VERSION);
    			if(m_D3D8 == NULL){
    				throw new Microsoft::DirectX::Direct3D::Direct3DXException("Konnte Direct3D nicht erstellen!");
    			}
    
    			IDirect3DDevice8* dd;
    			HRESULT hr;
    			if(FAILED(hr = m_D3D8->CreateDevice(adapter,(D3DDEVTYPE)dt,(HWND)iptr.ToPointer(),(DWORD)cf,&d3dPP,&dd))){
    				char arr[64];
    				D3DXGetErrorString(hr,arr,64);
    				throw new Microsoft::DirectX::Direct3D::Direct3DXException(String::Concat("Fehler beim erstellen des Devices: ",arr));
    			}
    
    			System::Drawing::Font* fon = new System::Drawing::Font("Arial",(float)20,System::Drawing::FontStyle::Regular);
    			HFONT hf = (HFONT) fon->ToHfont().ToPointer();
    
    			ID3DXFont* font;
    			try{
    				D3DXCreateFont (dd,hf,&font); //Hier stürzt er ab
    			}
    			catch(Exception* e){
    				MessageBox::Show(e->ToString());
    			}
    

    Er sagt mir, dass es möglicherweiße Fehler mit den Speichermanagement gibt:

    Attempt to read or write protected Memory. This is often an indication that other memory is corrupt.
    Danke im voraus
    ohama



  • Ich habe überhaupt keine Ahnung von dem C# oder .NET Kram... (zu meiner Verteidigung ;))

    Doch hier

    ohama schrieb:

    HFONT hf = (HFONT) fon->ToHfont().ToPointer();

    scheint es mir, als holst Du Dir 'nen HFONT-Typ zurück (was ja auch korrekt wäre), doch dann davon noch 'nen Pointer... 😕

    IMHO wäre
    HFONT hf = (HFONT) fon->ToHfont();

    oder
    HFONT *hf = (HFONT*) fon->ToHfont().ToPointer();

    korrekter...


Anmelden zum Antworten