我一直在尝试将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/