2016-06-12 4 views
0

Ich habe versucht, eine RGBA-Farbe in eine UINT32 zu konvertieren, um sie in der IFW1FontWrapper-> DrawString-Funktion zu verwenden, aber sie bringt das Spiel zum Absturz.FW1FontWrapper IFW1ColorRGBA

IFW1ColorRGBA *color; 
color->SetColor(r, g, b, a);//Crash 
UINT32 clr = color->GetColor32(); 
color->Release(); 

r, g, b, ist eine Art Jeder Schwimmer kann mir helfen, dies immer zu arbeiten?

Antwort

0

@Cody Grau Code hat nicht funktioniert, aber sie hat mir geholfen, zu verstehen, was ich falsch mache.

Dies ist der letzte Code, das funktioniert:

IFW1ColorRGBA* pColor; 
UINT32 clr = 0xffffffff; 
pfw1Factory->CreateColor(clr, &pColor); 
pColor->SetColor(r, g, b, a); 
clr = pColor->GetColor32(); 
+0

Nun, natürlich der Code nicht funktioniert hat. Ich sollte nicht kopiert und eingefügt werden. Ihre Frage hat uns nur gesagt, dass Sie DirectX 11 verwenden, aber es gibt keine DirectX-Schnittstelle mit dem Namen IFW1ColorRGBA oder FW1FontWrapper. Dies muss eine Klassenbibliothek sein, die du irgendwo bekommen hast oder etwas, das du selbst geschrieben hast. Wie erwarten Sie, dass wir das wissen, wenn Sie uns das nicht sagen? Ich hatte also keine Ahnung, welche Funktion mit dieser Klassenbibliothek aufgerufen werden sollte, um eine Farbe zu erstellen. Im Allgemeinen würden Sie in DirectX QueryInterface verwenden. Anscheinend ist das anders. Gut zu sehen, dass du es verblüfft hast. –

+0

Sie sollten wahrscheinlich noch überprüfen, ob CreateColor erfolgreich war. Wenn es sich um eine standardmäßige COM-basierte Schnittstelle handelt, wird ein HRESULT zurückgegeben, das Sie mithilfe des SUCCEEDED-Makros auf Erfolg überprüfen. Andernfalls führt die Dereferenzierung von pColor immer noch zu einem Absturz, wenn die Funktion die Farbe nicht erstellen kann. –

+0

Ok, ich werde das tun, und ich verwende die FW1FontWrapper-Bibliothek für die Zeichnung – Talococh

1
IFW1ColorRGBA *color; 

Diese Zeile deklariert einen Zeiger-to-IFW1ColorRGBA. Es wird jedoch nicht dieser Zeiger initialisiert. Es ist sicherlich nicht zuweisen Speicher, um ein Objekt zu speichern. Daher haben Sie hier einen nicht initialisierten Zeiger.

color->SetColor(r, g, b, a);//Crash 

Dann gehen Sie und versuchen, dereferenzieren dass nicht initialisierten Zeiger. Der Operator -> dereferenziert den Zeiger und ruft die Elementfunktion SetColor auf. BOOM! Sie haben ein undefiniertes Verhalten ausgelöst und Sie stürzen ab. Dieser Zeiger zeigte nicht auf ein gültiges IFW1ColorRGBA Objekt. Hoppla.

Sie müssen diesen Zeiger initialisieren. Da es sich tatsächlich um einen Schnittstellentyp handelt, würden Sie dies wahrscheinlich tun, indem Sie die Funktion QueryInterface für ein Zeichenobjekt aufrufen (wir nennen es pDrawingSomethingOrOther).
Zum Beispiel:

IFW1ColorRGBA* pColor; 
HRESULT hResult = pDrawingSomethingOrOther->QueryInterface(&pColor); 
if (SUCCEEDED(hResult)) 
{ 
    pColor->SetColor(r, g, b, a); 
    UINT32 clr = pColor->GetColor32(); 
    pColor->Release(); 
}