いつもDXライブラリに大変お世話になっております。
SetFontCacheCharNum、CreateFontToHandle、DrawStringToHandle、DeleteFontToHandleで
下記<再現ソース>の手順をおこなった際、
DxLib_End()内でアクセス違反が発生する現象を確認いたしました。
使用させていただいたDXライブラリはバージョン「3.24a」(1/11にダウンロードした版)です。
再現ソースを使用してこちらの環境で発生した状況は以下の通りです。
●VisualStudio Community 2022でコンパイルし、
Debug、Release版どちらでもアクセス違反が発生しました。
●指定した文字列自体は、画面外に出ている文字を除いて期待通り表示されているようでした。
●Visual Studioの「出力」によると、Log.txtにおける「d3d11.dll の解放 1」の直後に
アクセス違反の例外が発生しているようでした。
●Visual Studioからではなく、エクスプローラ上などからRelease版で出力されたEXEを
直接実行した場合は何もエラーが出ずに終了します。
しかし、そのEXEを削除しようとすると
「使用中のファイル 〜.exeによってファイルは開かれているため、操作を完了できません」
と出て削除できない状態になります。
環境依存や、使い方が悪いことによる問題かもしれませんが、
よければ一度ご確認いただけますと幸いです。
<こちらの環境のLog.txt>
ttps://silversecond.net/tmp/20230111_DxLibReport_Log.txt
<再現ソース>
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE); // ウィンドウモードに
if (DxLib_Init() == -1) { return -1; } // DXライブラリ初期化処理
SetFontCacheCharNum(200);//フォントキャッシュ文字数を200に
// いろいろな大きさのフォントハンドルを生成
int FontHandle = CreateFontToHandle("Meiryo", 150, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
int FontHandle2 = CreateFontToHandle("Meiryo", 28, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
int FontHandle3 = CreateFontToHandle("Meiryo", 20, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
int FontHandle4 = CreateFontToHandle("Meiryo", 34, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
int FontHandle5 = CreateFontToHandle("Meiryo", 22, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
int FontHandle6 = CreateFontToHandle("Meiryo", 26, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
int FontHandle7 = CreateFontToHandle("Meiryo", 64, 1, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_SHFTJIS, 0);
// 文字を表示。指定回数の画面更新後に自動で終了します
for (int i = 0; i < 500; i++) { // ←ここの500を「100」など小さい値にすると、終了時のアクセス違反が発生しなくなります
DrawStringToHandle(10, 10, "1ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle);
DrawStringToHandle(10, 160, "2ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle2);
DrawStringToHandle(10, 180, "3ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle3);
DrawStringToHandle(10, 200, "4ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle4);
DrawStringToHandle(10, 220, "5ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle5);
DrawStringToHandle(10, 240, "6ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle6);
DrawStringToHandle(10, 260, "7ABCDEFGHIJKLMNOPQRSTUVWXXYZあいうえお", GetColor(255, 255, 255), FontHandle7);
DrawStringToHandle(10, 400, "自動で終了します、お待ち下さい", GetColor(255, 255, 255), FontHandle2);
DxLib::ScreenFlip();
}
// フォント解放
DeleteFontToHandle(FontHandle);
DeleteFontToHandle(FontHandle2);
DeleteFontToHandle(FontHandle3);
DeleteFontToHandle(FontHandle4);
DeleteFontToHandle(FontHandle5);
DeleteFontToHandle(FontHandle6);
DeleteFontToHandle(FontHandle7);
DxLib_End();
return 0; // ソフトの終了
}