Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.02.2010, 19:01

tbEffect und Debugmodus

Wenn ich versuche die Debugversion von der Beispieldatei mit den Modellen zu kompilieren und dann zu starten bekomme ich immer einen Laufzeitfehler während die Funktion tbEffect::SetTechnique aufgerufen wird. Die Releaseversion funktioniert aber ohne Probleme. Bei einem selbstgeschriebenen Programm habe ich exakt das gleiche Problem.
Wäre über eine Lösung echt dankbar auf die schnelle hab ich nichts gefunden.
Die Fehlermeldung lautet:

Zitat

"Modelle.exe": "C:\Windows\System32\D3DCompiler_42.dll" entladen.
D3DX: ID3DXEffect::IsParameterUsed: Invalid technique handle
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.


Hier die zugehörige Funktion:

C-/C++-Quelltext

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
tbResult tbEffect::SetTechnique(int iTechnique) // = -1

{
    // Parameter prüfen

    if(iTechnique < -1 || iTechnique >= (int)(m_Desc.Techniques)) TB_ERROR_INVALID_VALUE("iTechnique", TB_ERROR);


    // Wenn -1 angegeben wurde, dann müssen wir die erste gültige

    // Technik suchen.

    if(iTechnique == -1)
    {
        // Alle Techniken durchgehen und überprüfen

        for(int iTest = 0; iTest < (int)(m_Desc.Techniques); iTest++)
        {
            // Die Technik abfragen und ValidateTechnique aufrufen, um sie zu prüfen

            D3DXHANDLE hTechnique = m_pEffect->GetTechnique(iTest);
            if(SUCCEEDED(m_pEffect->ValidateTechnique(hTechnique))) //in dieser Zeile tritt der Fehler auf

            {
                // Die Technik ist OK! Aktivieren und wir sind fertig.

                m_pEffect->SetTechnique(hTechnique);
                return TB_OK;
            }
        }

        // Keine gültige Technik gefunden! Macht aber nichts, die Techniken

        // funktionieren meistens trotzdem.

        // Wir wählen nun die letzte Technik im Effekt. Diese sollte so gewählt sein,

        // dass sie auf möglichst vielen Grafikkarten funktioniert.

        m_pEffect->SetTechnique(m_pEffect->GetTechnique(m_Desc.Techniques - 1));
        TB_WARNING("Es wurde keine gültige Technik gefunden!");
    }
    else
    {
        // Die angegebene Technik abfragen und aktivieren

        m_pEffect->SetTechnique(m_pEffect->GetTechnique(iTechnique));
    }

    return TB_OK;
}

2

07.02.2010, 21:07

Hab das Problem gelöst:
Ich habe bei

C-/C++-Quelltext

1
for(int iTest = 0; iTest < (int)(m_Desc.Techniques); iTest++) 
den (int) cast in der TriBaseD.dll enternt und iTest als UINT deklariert und jetzt wird kein Fehler mehr angezeigt. Find nur merkwürdig, das ich scheinbar der erste bin bei dem das Problem aufgetreten ist?!?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

3

07.02.2010, 21:20

Zitat

Find nur merkwürdig, das ich scheinbar der erste bin bei dem das Problem aufgetreten ist?!?


Ich hatte diesen Fehler auf jeden Fall nicht, aber dafür genug Andere. Bei mir war es aber teilweise auch so, dass es in den Debug-Versionen Fehler gab, die in der Relase nicht vorkamen.

4

07.02.2010, 21:33

Mir ist grad eingefallen, das das wohl ein Fehler meinerseits bei der Anpassung an VC 2008 gewesen sein muss.

Werbeanzeige