IMG_4235.JPG

アマゾン古書のぼったくり価格で買った『実践 C++/CLI 極めるための基礎と実用テクニック』(中 博俊 )

C++/CLIは、.NET Frameworkの共通言語基盤 (CLI)上で実行するプログラムを作るためにC++を拡張したプログラミング言語である。Wikipediaより

VS構成員の中ではJ#やF#並みにマイナーな扱いのC++/CLIはVisual Studio 2005でデビューしたが、実際のところ次バージョンのVS2008以降サポートが縮小されて続けている。2008ではASP.netのテンプレートが無くなり、2010ではインテリセンスがなくなったり(2012で復活はした)、データセットテンプレートも無くなり、2012でWindowsフォームが無くなり、2017だとフォームUIを後から追加することすらできないとか、MS自身もC++/CLIでUI作るの非推奨と言っているから、もう既存プロジェクトの保守以外は使うなってことみたいです。今後はC++/CLIはグルーコードに徹して他はC#でもおとなしく使ってろってことだ。まあ、グルーコード書けるのはILアセンブラだけだよ、って言われるよりはいいかもね。

そんなわけでC++/CLIは資料も本も少ない。「C#でもできるようなことだけ」を「わざわざC++/CLIに置き換えただけ」の解説本も多くて、そんなのは読むだけ時間の無駄だ。冒頭で挙げた書籍はそうではく、きちんとレガシーC++の世界やC++ライブラリの世界とCLRの境界を意識した解説を(かつ日本語で)しているのでそういった意味で希少。C++/CLIの前身であるC++マネージ拡張の解説も載っててちょっと嬉しい。そういうのはVS.net(2002)でC#のデリゲート、アンマネージドコード・Win32 API呼び出しあたりの吐き気のする構文避けてきたし。

でもVS2005時代の本なのでさすがに内容が古くなっている。VS2013で動くかどうか確認してみた。

  • 第1部Chapter1 ~ 4 は文法解説だけなので特に問題なし。

第2部は「Visual C++ 2005 Express EditionによるC++/CLIプログラミング」で、苦労しそう。

  • Chapter5 Visual C++ 2005 Express Editionの導入
    読み飛ばして問題なし。動作確認としてMFCアプリを作っているので、2008以降のExpress Editionでは無理。ProfessionalかCommunityを用意する。VS2013Proでは操作が異なるが、特に問題なし。
  • Chapter6 より実践的なC++/CLIプログラミング
    COMとの連携。いきなりCOMですか、て感じなのでMFCの本でCOMの使い方を勉強してから読むこと。無理なら後回しでも良い。WindowsフォームCLRアプリが出てくるのでVS2013では無理。VS2010以前も必要。

第3部「C++/CLI実践プログラミング 過去の資産活用事例」と副題。

  • Chapter 7 アプリケーションの設定情報をXML化する
    過去の資産といいつつ、現在でも使えるテク。XMLといいつつ.configに保存する方法にさりげなく変更。コンソールCLRアプリで、VS2013でも問題なし。
  • Chapter 8 C++で保存していたデータを他言語から利用する
    「シリアライズ」というキーワードがあるがMFCのArhiveではないので混乱する。WindowsフォームCLRアプリが出てくるのでVS2013では無理。VS2010以前も必要。
  • Chapter 9 データベースアクセスプログラムをADO.NETに変更する
    ADO、ADO.net、DBのスタティックバインドなんかを非常にあっさり説明してるので、データベース接続のプログラムを組んだ経験がないと難しい。しかもサンプルがOracle DBのネイティブ接続だからOracle無いと試せんし。Access2016で.accdb作ってODBC経由で試した。さらに三重苦としてVS2013にはデータセットテンプレートが無いのでそのままは無理。C#で組んでからインポート後、少しいじる。

第4部「.NET Frameworkクラスライブラリの活用」となっていて、ネイティブC++は使わないのだが、WindowsフォームCLRアプリがそこかしこに出てくるのでVS2013はそのままでは無理。この章はC#でさらってもいいくらい。

  • Chapter 10 暗号ライブラリの利用
    すべてWindowsフォームCLRアプリで組んでいくので一工夫必要。
  • Chapter 11 .NETリモーティング
    コンソールCLRアプリなのでVS2013でも特に問題なし。実行方法などはもう少し解説があったほうがいいかも。この辺から誤植が多い。
  • Chapter 12 XML Webサービスの作成と利用
    VS2008以降はC++Webサービスのサポートが無いので無理。ソリューションのコンバートを行ってもうまくいかなかった。XP+VS2005Proでないと動かない。C#で組みなおせばVS2013でもできるがそれでは意味が無い。

ひととおり試したら最後のChapter12以外はなんとか動かせたけれど結構苦労する。特にChapter9。苦労したくなければXP+VS2005Proの環境を構築するのが手っ取り早い(今回はVirtual Box上にWin XP+VS 2005とWin8.1+VS2010+VS2013を構成した)が、それ以外は対処方法もあるので後日追記予定。ただ、サンプルを動かすにはMSDNでVisual Studio Pro 2005/2010/2013を同時に使える環境を用意するのが手っ取り早い。無償で使えるVisual Studio 2017 Community(MSDNサブスクリプション無し)では困難が多い気がする。

今日のおもしろQ&A。

VisualC++で、windowsフォームアプリケーションを作りたいです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10144686995

VC++でオヌヌメの本ありますか?って聞いたら「書籍としてどういうものがあるのか分からない」と個人的経験を述べられたうえで「C++/CLI で作っても意味無い」とぶった斬られたでござるの巻。

C++/CLIベースのUIがすでにMSからも見捨てられてるっていうのは明らかだとしても、ILアセンブラでフォームアプリ作りたいんですっっ!、て技術的興味がある人も世の中にはもいるよね。VC++でフォームでCLR部分だけの本なんてVisual Studio 2010前後のならこれとかこれとか結構あると思うし。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中