FW1FontWrapper IFW1ColorRGBA
FW1FontWrapper IFW1ColorRGBA
我一直在尝试将 RGBA 颜色转换为 UINT32 以便在 IFW1FontWrapper->DrawString 函数中使用,但它导致游戏崩溃。
IFW1ColorRGBA *color;
color->SetColor(r, g, b, a);//Crash
UINT32 clr = color->GetColor32();
color->Release();
r,g,b,a类型为FLOAT
任何人都可以帮助我让它工作吗?
IFW1ColorRGBA *color;
这一行声明了一个指向IFW1ColorRGBA
的指针。但是,它不会 初始化 该指针。它当然不会分配任何内存来存储对象。因此,你这里有一个未初始化的指针。
color->SetColor(r, g, b, a);//Crash
然后你去尝试取消引用那个未初始化的指针。 ->
运算符取消引用指针并调用 SetColor
成员函数。 BOOM! 您调用了未定义的行为并崩溃了。该指针实际上并未指向有效的 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();
}
@Cody Gray 你的代码没有用,但你帮助我理解了我做错了什么。
这是最终有效的代码:
IFW1ColorRGBA* pColor;
UINT32 clr = 0xffffffff;
pfw1Factory->CreateColor(clr, &pColor);
pColor->SetColor(r, g, b, a);
clr = pColor->GetColor32();
我一直在尝试将 RGBA 颜色转换为 UINT32 以便在 IFW1FontWrapper->DrawString 函数中使用,但它导致游戏崩溃。
IFW1ColorRGBA *color;
color->SetColor(r, g, b, a);//Crash
UINT32 clr = color->GetColor32();
color->Release();
r,g,b,a类型为FLOAT 任何人都可以帮助我让它工作吗?
IFW1ColorRGBA *color;
这一行声明了一个指向IFW1ColorRGBA
的指针。但是,它不会 初始化 该指针。它当然不会分配任何内存来存储对象。因此,你这里有一个未初始化的指针。
color->SetColor(r, g, b, a);//Crash
然后你去尝试取消引用那个未初始化的指针。 ->
运算符取消引用指针并调用 SetColor
成员函数。 BOOM! 您调用了未定义的行为并崩溃了。该指针实际上并未指向有效的 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();
}
@Cody Gray 你的代码没有用,但你帮助我理解了我做错了什么。
这是最终有效的代码:
IFW1ColorRGBA* pColor;
UINT32 clr = 0xffffffff;
pfw1Factory->CreateColor(clr, &pColor);
pColor->SetColor(r, g, b, a);
clr = pColor->GetColor32();