スポンサーリンク

CLaunchとVC++の相性が悪い件

前置き

本当は開発者に直接言うべきなんだが(またか)、腰が重すぎて十年たっても行動する未来が見えないのでここに書いておく。私は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;
}

終了時

0x00007FFD63892D6A (ntdll.dll) で例外がスローされました (WindowsProject2.exe 内): 0xC0000008: An invalid handle was specified

exe_common.inl内、以下のあたりで起こる。

if (!__scrt_is_managed_app())
    exit(main_result);

if (!has_cctor)
    _cexit();

注意

再現性はそこそこ高いのだが出るときはでるものの出ないときは何度試しても出ない。出ないときは何度も実行するか、VC++を再起動するなどするとそのうち発生する。

余談

なお今著者はゼルダの伝説ToKをやっていて記事を書く時間があまりない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: