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:
etTechnique 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:
"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;
}
|