謎.NET

先日、Visual Studio Express 2012 for Windows Desktop をインストールした。もっぱら VC++ の部分を。搭載されているテキストエディタには補完機能がついていて、関数名や、構造体のメンバ名などをサジェストしてくれるし、関数の仮引数の型までも表示してくれる。

NU まで打つと NULL が出てくる

ソースファイルや画像リソースなどは、「プロジェクト」という単位で一まとめに扱えるので、開発するアプリケーションが大規模になっても管理がしやすい。

コンパイラやリンカのオプションはたくさんあるが、おそらくその全てが GUI 上で設定できるので、コマンドラインを覚える必要がない。

といった具合に、無料とは思えないほど高機能なソフトなのだが、最近は使わなくなってきた。というのも、このソフトで生成されるアプリケーションは、必ず .NET 依存であるからだ。

どうにかして、.NET に依存しない ネイティブアプリーション をつくれないものかと試してみたが、むりだった。というのも、.NET の何かしらの DLL が必須であるというレベルではなかったからだ。

たとえば、VSE で msvcrt.lib をリンクして EXE をつくると、標準 API として、msvcrt.dll ではなく、msvcr110.dll を呼び出す。gcc は msvcrt.dll を使うので、異なっている。

そこで、msvcrt.lib をリンクしないようにする。と、msvcr110.dll は呼び出されなくなる。が、そんな実行ファイルを .NET をインストールしていない Windows XP で実行すると、エラーが出て起動できなかった。

以下のサイトに、.NET アプリケーションのバイナリ構造についての解説がある。(2005 年)