Toon posts:

[C++/Direct3D] Access violation in MsgProc

Pagina: 1
Acties:
  • 45 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bezig om een eigen implementatie van cd3dapplication te maken. Het bouwen en linken gaat goed maar bij het uitvoeren krijg ik een access violation. Mijn code is deels van mij zelf en deels komt het uit de voorbeelden van de SDK.

De error:
Unhandled exception in D3D_Mesh.exe: 0xC0000005: Access Violation
Dit gebeurt op de tweede regel van mijn MsgProc, dus waar de { staat

De code
Ik zal de gehele code niet posten aangezien hij daar nog geen eens komt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class MyApp : public CD3DApplication
{
private:
        CD3DFont*                   m_pFont;
        D3DXMATRIX                  m_matView;
        D3DXMATRIX                  m_matProjection;
        pMyMesh                     aMeshA, aMeshB;
public:
                                MyApp();
        LRESULT                 MsgProc(HWND hWnd,UINT uMmsg,WPARAM wParam,LPARAM lParam);
        
protected: 
        HRESULT                 ConfirmDevice(D3DCAPS9*, DWORD, D3DFORMAT, D3DFORMAT);
        HRESULT                 OneTimeSceneInit();
        HRESULT                 InitDeviceObjects();
        HRESULT                 InitScene();
        HRESULT                 RestoreDeviceObjects();
        HRESULT                 InvalidateDeviceObjects();
        HRESULT                 DeleteDeviceObjects();
        HRESULT                 Render();
        HRESULT                 FrameMove();
        HRESULT                 FinalCleanUp();
};
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE, LPSTR, INT)
{
    MyApp d3dApp;
    InitCommonControls();
    if (FAILED(d3dApp.Create(hInst)))
        return 0;

    return d3dApp.Run();
}

LRESULT MyApp::MsgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{                     
        if (uMsg == WM_COMMAND)
  {
    switch (uMsg)
    {
    case WM_DESTROY:
                    PostQuitMessage(0);
                    return 0;
    case WM_PAINT:                  
                    ValidateRect(hWnd, NULL);
                    return 0;
    }
  }

        return MyApp::MsgProc(hWnd, uMsg, wParam, lParam);

}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mja, daar is niet veel van te zeggen zo. Wat is CD3DApplication voor een klasse eigenlijk?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Dat is een object wat bij de DirectX SDK zit. In dit object worden alle basic handelingen die nodig zijn om "simple" Direct3D application te maken. Je kan bepaalde functies overschrijven. Zo kan je bijvoorbeeld je eigen 3D objecten renderen zoals mijn MyMesh. De CD3DApplication wordt ook gebruikt om alle Direct3D samples weertegeven die bij de SDK zitten.

Wat je met de CD3DApplication ook kan is het afhandlen van de winapi functies.
Dit is wat er in mijn applicatie fout gaat. Aangezien Het eerste wat gebeurt in het programma is het aanroepen van de WinMain daarna in de win main wordt mijn eigen versie van de CD3DApplication aangemaakt. Hier wordt ook de WinProc in opgestart en gaat het dan al snel fout.

Misschien dat iemand heel de source wil door pluizen.
MyApp
My Mesh <--- Deze klasse wordt geladen en gerenderd in MyApp

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Lijkt me dat je vanaf je WinMain moet gaan tracen. Misschien is er wat initialisatie nodig om d3d te starten oid ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23:27

Tomatoman

Fulltime prutser

Verwijderd schreef op 21 augustus 2004 @ 16:29:
Misschien dat iemand heel de source wil door pluizen.
MyApp
My Mesh <--- Deze klasse wordt geladen en gerenderd in MyApp
Bel even een IT-dienstverlener en huur een programmeur. Die wil heel de source best voor je uitpluizen. Maar wij hier op GoT gaan dat natuurlijk niet voor je doen, het is hier geen wie-bouwt-voor-mij-een-programma-forum.

Een goede grap mag vrienden kosten.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd, dat doen wij op GoT niet. Aan de code in je eerste post is niets fouts te zien. Je zult je probleem moeten isoleren, pas dan kunnen wij je helpen. Ik vermoed stack corruption, of een foute this pointer, maar dat kan door talloze redenen optreden. De voornaamste is denk ik het aanroepen van een method op een al opgeruimd object (omdat delete er al op is aangeroepen of omdat ie buiten scope is gegaan), misschien moet je daar nog eens naar kijken. Maar goed, dat blijft natuurlijk giswerk, we gaan je code niet doorspitten, en dus gooi ik je topic op slot. Als je je probleem geisoleerd hebt en je snapt niet waarom dat fout gaat dan ben je natuurlijk vrij een nieuwe te openen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.