あれ?おかしいぞ
先週出したMeiryo UIも大っきらい!! Version 3.3.0、普通にVisual Studio 2022のコンパイラーでビルドしたらMicrosoftのアンチウイルスでウイルス扱いされるので慌ててVisual Studio 2008でコンパイルした物を出したらフォントをカスタマイズするとタイトルバーが狭くなってタイトルが表示されないというバグが出た。
自分はESET使っているので闇討ちになったのだがこれはまずい。で、調べてもVisual Studio 2022だったので気づかなかったのだが、2008でビルドするとでて、2022でビルドすると出ないというおかしな事になった。
DLL Hell forever
で、考えてみるとVisual Studio 2008ではWindows 7 SDKでWindows 7互換のシステムDLLを呼んでいる。Visual Studio 2022ではWindows 10 SDK 10.10.19041.0をリンクしている。WindowsフォルダのWinSxSフォルダなんて見ているとあほみたいに同じようなファイルがあって、それぞれのVisual Studio,Windows、Windowsに至っては10以降の各版に対応するSDKが呼び出すDLLがあるのだが、どうもVisual Studio 2008/Windows 7相当のDLLで外れを引いたようだ。
第3のコンパイラー
Visual Studio 2022から呼び出せるWindows 10世代のコンパイラーVisual Studio 2015/2017/2019/2022は前にもアウトになったことがあった。で、MulSyncの開発中にWindows 7の確認用にネットワークから隔離したWindows 7での実地修正用に入れていたVisual Studio 2012があったのを思いだした。(怒りの)Windows 8世代のライブラリーを呼び出すコンパイラーである。
なまじプロジェクトファイルがVisual Studio 2022と同じなのでかぶるの面倒と思いながらビルドして動かしてみるとこれが当たり。ちゃんとタイトルバーも出ているし、Microsoftにも怒られない。どうやらWindows 7 SDKから呼び出されるWindows 7互換システムファイル、Visual Studio 2022ランタイムライブラリと2つ外れを引いたようだ。
まさかここで超半端世代Visual Studio 2012が役に立つとは思わなかった。Visual Studionは世代的に、
- Visual Studio 6(Pre .NET、Windows XPまで)
- 2002&2003(.NET Framework 1.x、Windows XP)
- 2005&2008(.NET Framework 2~3.5、Windows Vista & 7)、2010(.NET Framework 4.x、Windows Vista & 7用)
- 2012&2013(.NET Framework 4.x~、Windows 8/8.1)、2015(.NET Framework 4.x/Core~、Windows 10初期)
- 2017~(.NET Framework 4.x/.NET、Windows 10中期以降)
という形でグループ分けされるのだがまさかの半端世代2012が役に立つとは思わなかった。
ちなみにExpress 2012 for Desktopなのはオフライン認証できる最後のVisual Studioだからという理由一点である。
こんなんじゃいつまで経っても最新のC++使えないなぁ。