ファイルからフォントをロードしてDirect3Dで使用しようとしていますが、Windows 7マシンでは完全に動作しますが、XP SP2マシンDrawText
への最初の呼び出しは0(失敗したことを意味する)を返し、2回目の試みはプログラムがクラッシュする原因となります。Direct3D ID3DXFont-> Windows XPのDrawTextクラッシュ
Windows XPのDirect3Dにインポートされるフォントにはいくつかの制限がありますか? DrawText
が0を返すことはそれほど有用ではないので、便利なエラーコードを得る方法はありますか?私は管理:
HRESULT result = D3DXCreateFont(
d3dDevice_,
height,
0,
isBolded ? FW_BOLD : FW_NORMAL,
0,
false,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
name.c_str(),
&d3dFont);
if (FAILED(result)) {
// Throw exception.
}
編集:私は(も問題なく返されます)ID3DXFont
オブジェクトを作成する方法
if (AddFontResourceEx("ttfFiles/tf2Build.ttf", FR_PRIVATE, 0) == 0) {
// Throw exception.
}
そして、ここにある:参考
は、ここに私のフォントのインポートのコードですそれをXPのデバッガの下で発生させるには、ここに表示される非常に恐ろしいエラーが表示されます:
DirectFont.exeで 'System.AccessViolationException'型の未処理の例外が発生しました 追加情報:保護されたメモリを読み書きしようとしました。これはしばしば、他のメモリが壊れていることを示します。 !
のusp10.dll ClientData :: GetOtlTable()+ 0x35のバイト
のusp10.dll otlResourceMgr :: getOtlTable()+ 0x7Aのバイト
usp10:!そしてここでは、スタックトレースです.dll!SubstituteOtlChars()+ 0x1afバイト
のusp10.dll!OtlShape()+ 0x3c5バイト
D3DX9_43.dll!D3DXCore :: CFont :: DrawTextAW()+ 0x5aaバイト D3DX9_43.dll!D3DXCore :: CFont :: DrawTextA()+ 0x26バイト
実際のドローコードはどのように見えますか?それは他のフォントでも使えますか?フォントが正しく読み込まれていると思いますか? '== 0'は必ずしも成功または失敗を示すわけではないので、' SUCCEEDED(hr) 'と' FAILED(hr) 'マクロを使うべきです。正確な戻り値はかなり重要です。 – ssube
クラッシュのコールスタックとは何ですか? –
peachykeen: 'AddFontResourceEx'はHRESULTを返しません。追加されたフォントの数を返します。失敗した場合は0を返します。 – Jengerer