我一直在尝试将RGBA颜色转换为UINT32以在IFW1FontWrapper-> DrawString函数中使用,但是它使游戏崩溃。

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


r,g,b,类型为FLOAT
任何人都可以帮助我使它正常工作吗?

最佳答案

IFW1ColorRGBA *color;



该行声明一个指向IFW1ColorRGBA的指针。但是,它不会初始化该指针。它当然不会分配任何内存来存储对象。因此,您这里拥有的是未初始化的指针。


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



然后,您尝试取消引用该未初始化的指针。 ->运算符取消引用指针并调用SetColor成员函数。繁荣!您调用了未定义的行为,并且崩溃了。该指针实际上没有指向有效的IFW1ColorRGBA对象。哎呀。

您需要初始化该指针。由于它实际上是接口类型,因此您可以通过在某些图形对象上调用QueryInterface函数来实现(我们将其称为pDrawingSomethingOrOther)。
例如:

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

关于c++ - FW1FontWrapper IFW1ColorRGBA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37776518/

10-13 00:06