本当は開発者に直接言うべきなんだが(またか)、腰が重すぎて十年たっても行動する未来が見えないのでここに書いておく。私はCLaunchのヘビーユーザーなのだがVC++の挙動がおかしいのがまさかこれが原因と思わず数か月悩み続けた。
CLaunchは ぴょんきち 氏の開発したランチャーで、以下のサイトからダウンロードできる。
http://hp.vector.co.jp/authors/VA018351/index.html
・Windows 10 または Windows 11
・Visual Studio 2019 または 2022
・CLaunch 4.04 を起動した状態
上記の条件で、C++プロジェクトを作成し、Win32APIを使用するプログラムを書きデバッグモードまたはリリースモードで実行すると、プログラム終了時、exe_common.inlの中のhas_cctor周辺で高確率で例外が発生する。なおver3系では起こらないかもしれない。
#include<windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, TEXT("my test"), TEXT("title"), MB_OK); return 0; }
exe_common.inl内、以下のあたりで起こる。
if (!__scrt_is_managed_app()) exit(main_result); if (!has_cctor) _cexit();
再現性はそこそこ高いのだが出るときはでるものの出ないときは何度試しても出ない。出ないときは何度も実行するか、VC++を再起動するなどするとそのうち発生する。
なお今著者はゼルダの伝説ToKをやっていて記事を書く時間があまりない。