特集

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の活用

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH