特集

Vista時代のVisual C++の流儀(前編)

Vista到来。既存C/C++資産の.NET化を始めよう!

επιστημη(えぴすてーめー)
2007/01/31
Page1 Page2 Page3 Page4


店頭に並ぶWindows Vista
最上位エディションのUltimateを初め、Business、Home Premium、Home Basicの各パッケージが置かれている。

 さてさて、2007年はVistaの年となりました。(記事日付では)昨日1月30日のWindows Vista発売早々、さっそくインストールした方も少なくないことでしょう。すでに家電量販店には製品パッケージが大々的に陳列されています。最上位エディションであるVista Ultimateともなると5万円超、なかなか強気な価格設定です。

 筆者は無線LANでインターネットにつないでいるのですが、まだドライバがVistaに対応してくれていないので本格稼働はしばらくお預け。対応アプリケーション&ドライバが増えてくればVistaの普及に拍車がかかるでしょうね。

Vista時代にC/C++はもはやお払い箱なのか?

 16bit Windowsの時代からWindows XP/Server 2003の現在まで、Windowsアプリケーションの構築にはWindows APIが多く用いられてきました。それがVistaでは大きく変わります。従来のWindows APIは依然としてサポートされているものの、OSがアプリケーションに提供するAPIは.NET Frameworkがメインとなるためです。

 そうなると微妙なのがVisual C++(以下VC++)の立ち位置です。いままでC/C++で書かれてきたアプリケーションやライブラリはもはやお払い箱となってしまうのでしょうか?

 マイクロソフトのUS版フォーラムに興味深い投稿を見つけました。

「Vistaに搭載される.NET Framework 3.0の新機能がVC++ではサポートされていないが、これはWindowsアプリケーションの構築ではC#/Visual Basic(以下VB)が主流になるということを意味するのか? だとすれば将来的にVC++はどうなるのか?」

との問い掛けに対し、VC++開発チームからは以下の回答が寄せられています。

「C#/VBと同等の.NET対応をVC++に求めるより、VC++にはC#/VBにはできないことをやらせる方向に注力したい。すなわち高速/高機能なネイティブ・コードを書くこと、そして.NETのマネージ・コードと(従来の資産を含めた)ネイティブ・コードとの橋渡しである。」

 つまりマイクロソフトは、Vistaにおいてネイティブ・コードによるアプリケーションやライブラリに見切りをつけたわけではなく、むしろネイティブ・コード、特にいままでにC/C++で書かれたライブラリのたぐいを捨てずに(あるいはC#/VBに移植せずに)マネージ・コードの中で生かしてほしい、両者をすんなりつなぐためにVC++を活用してほしい、ということでしょうか。

 ご安心ください、いまある数多くのC/C++ライブラリのほとんどはVistaであっても使えます。ただし、いまあるネイティブ・コードに指一本触れずに.NETの世界に飛び込めるわけではないこともご承知おきください。

 端的にいえば、Windows APIおよびそれをベースにしたMFCを用いて実装されたアプリケーションはVista上で動作します。しかしながらそれはVistaの流儀に従っているわけではありません。

 例えば各アプリケーションの設定情報はXPまではレジストリに置いて集中管理することが推奨されていましたが、Vistaでは実行可能ファイルの置かれたディレクトリにXML形式の構成ファイルとして配置することが推奨されます。

 あるいはWindows API(含むMFC)によるUIと.NET Frameworkが提供するUIとでは見た目や操作感が異なります。多くの.NET Frameworkによるアプリケーションが存在するVistaの中では、Win32ネイティブ・アプリケーションには違和感を覚えることでしょう。さらにUIの設計と構築についていえば、.NET FrameworkのUIテクノロジ「Windowsフォーム」を使った方がWindows APIやMFCで行うより圧倒的に楽で、ほとんどコードを書くことなく行えます。

 そんなわけで、いまあるMFCによるアプリケーションが1日にしてお払い箱とはなりません。が、ゆくゆくはお行儀の良いVista対応を施すべく、アプリケーションからWindows APIやMFCを引きはがし、.NET Frameworkでリライトするのが上策と考えます。その際、Windows API/MFCに依存しない純粋(?)なネイティブ・コードを分離/独立させておけば、それとマネージ・コードをつなぐのに「C++/CLI」が利用できます。

C/C++資産をどこまで生かせる?

 前述のとおり、.NETの中でこれまでのC/C++資産を生かすにはまず、アプリケーションやライブラリからMFC依存部分を分離する、あるいはMFCが提供するクラスや関数を書き換えておくのがよさそうです。そして、書き換えたネイティブ・コードをC++/CLIで包み込めば、それらのライブラリやクラス、関数は「.NETのマネージ・コードから呼び出すことのできる部品」とすることができます。

 簡単なサンプルをご覧に入れましょう。

 

 INDEX
  [特集]
  Vista時代のVisual C++の流儀(前編)
  Vista到来。既存C/C++資産の.NET化を始めよう!
  1.Vista時代にC/C++はもはやお払い箱なのか?
    2.C/C++資産をどこまで生かせる?
    3.ネイティブ・オブジェクトをマネージ・コードでくるむ
    4.文字コード変換
 
  Vista時代のVisual C++の流儀(中編)
  MFCから.NETへの実践的移行計画
    1.C++/CLIによるWindowsフォーム・アプリケーション
    2.言語をまたいだDocument/Viewアーキテクチャ
    3..NET移行前のMFCサンプル・アプリケーション
    4.MFCのDocument/Viewアーキテクチャの.NET化
    5.MFCで書かれたDocumentを.NET化する2つの方法
 
  Vista時代のVisual C++の流儀(後編)
  STL/CLRによるDocument/Viewアーキテクチャ
    1.STL/CLRとは
    2.STL/CLRの特徴
    3.Visual Studio 2005で試す
    4.おまけ:NUnitの活用


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間