我正在尝试从文件中加载字体然后在Direct3D中使用它,它在我的Windows 7机器上运行得很好,但是如果我在XP SP2机器上尝试它,那么第一次调用{{1}将返回0(表示失败),第二次尝试将导致程序崩溃。
Windows XP上Direct3D中的导入字体是否有一些限制?有没有办法可以得到一些有用的错误代码,因为DrawText
返回0本身并不是很有帮助。
供参考,这是我的字体导入代码:
DrawText
以下是我创建if (AddFontResourceEx("ttfFiles/tf2Build.ttf", FR_PRIVATE, 0) == 0) {
// Throw exception.
}
对象的方法(也会返回没有问题):
ID3DXFont
编辑:我设法让它在XP中的调试器下发生,这是一个非常可怕的错误:
DirectFont.exe中出现未处理的“System.AccessViolationException”类型异常 附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
这是堆栈跟踪:
usp10.dll!ClientData :: GetOtlTable()+ 0x35 bytes
usp10.dll!otlResourceMgr :: getOtlTable()+ 0x7a bytes
usp10.dll!SubstituteOtlChars()+ 0x1af bytes
usp10.dll!OtlShape()+ 0x3c5 bytes
D3DX9_43.dll!D3DXCore :: CFont :: DrawTextAW()+ 0x5aa字节 D3DX9_43.dll!D3DXCore :: CFont :: DrawTextA()+ 0x26 bytes
答案 0 :(得分:1)
问题可能出在绘图循环中,而不是初始化。在drawtext调用处放置一个断点,并在第二次调用时查找任何无效参数。