C++/CLIの本を最近のVisual Studioで試す

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以前が必要。本の手順に従わないならCLRプロジェクトを作って、UI追加でCLR Windowsフォームを追加してmainからフォーム作成のコードを数行書けばできなくもない。

第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前後のならこれとかこれとか結構あると思うし。

広告

インテルRSTとスリープ・休止状態

NUC6i7KYKでせっかくSSD二枚挿しにしたからRAID0で最速構成。

でもスリープの復帰ができない。休止状態からの復帰もできない。ブルースクリーンとか変なピンクスクリーンで、CRITICAL_PROCESS_DIED。どうもRAIDコントローラを見失うらしく当然ページファイルその他も見失ってBSODしかできない様子。

IDEというかメインストレージコントローラまわりのインテル製ドライバって鬼門だわ。430TXのバスマスタドライバとかそのあたりから始まって、AHCIモードとか、さんざん不具合で結局MS純正ドライバが一番安定してるとか。

 

FLAC、ALACを陥落。

iOS11、無劣化圧縮のハイレゾ音源形式FLACに対応! – iPhone Mania
http://iphone-mania.jp/news-170816/

遅い。遅すぎる。囲い込み以外、何の利点も無いALACを黒歴史として葬り去る時が来た。

マカーらのブログ(笑)で「WAV? FLAC? ( ´_ゝ`プッ。ALACに統一してCD断捨離(`・ω・´キリッ!」みたいな意識高いご意見を見た気がする。そもそも対応してなかったものだし、ない袖は振れないから仕方ないけどね。ALACのサポートがなくなるわけではないが、AppleがALACだからFLACなんかより良いはずとついてきた信者様。今、何思うか。

猿腕とBMI

数日前に「猿腕(肘の過伸展)に男女差もヤセも関係ない」と書いた憶測の裏付けをとってみた。

人間の腕は逆にも曲がるのが普通
https://wordpress.com/post/mzex.wordpress.com/10210

細身の女子に多い!スラリとした腕の敵「猿腕」って何?
https://moteco-web.jp/diet/20139

正直なとこ猿腕=過伸展ってわけでは無いんだけど、世の中の女子がこの記事に対しては「猿腕は細身とか、そんなわけネ~ヨ」と敵意を抱いている気がする。

人間特性計測データベース
http://www.tech.nite.go.jp/human/index.html

こっから、同じようにデータをとってきてExcelでちょいちょい加工。

elbowrom2

横軸がBMI、左方向がヤセ、右方向がデーヴ。
縦軸が肘関節の伸展角度(自動可動)。中央が0度、上に行くほど肘が逆に曲がる角度が大きくなる。

一目瞭然っすね。男性は相関なし。女性は母集団から離れた左上(ヤセで過伸展)と右下(太身で伸展制限)に点在する領域がある部分も見られるが、ほぼ相関無し。厳密に見るとちょっと楕円になっている気がしなくもないが、強い相関があるとは言えない。男女とも肘は平均6度ほど逆にも曲がるもの(過伸展)なので過伸展側0~10の間が一番密になっている。0度付近ではない。

次に伸展と年齢の関係を見てみる。今度は横軸が年齢。

elbowrom3

60~70代が密集しているがサンプル数が多いだけ。それより注目すべきは60未満では年齢によらず伸展角度のばらつきがほとんど同じだというところ。確かに-方向に少し傾いてはいるが、やはり年齢と猿腕も強い相関があるとは言い切れない。

女性の60未満に伸展-5度未満の領域がほぼ無いのに対して男性は伸展-5~-10度の領域に点在している層があることのほうが興味深い。また0度以上の領域には性差が無いことから、やっぱり「猿腕は女性に多い」ではなく「伸びない男性が見られる」という表現のほうが良い気がする。

猿腕に細身・太身や年齢、性別はあまり関係ない。と思う。

キャリーアングルとBMIの相関がわかればもっと正確に推測できるはずだけどデータを見つけられず断念

ズームレンズ広角端の歪

今使っているキヤノンのコンパクトデジカメはiPhoneなんかのスマホなナンチャッテ高画質と比較すると圧倒的にきれいなんだけど、電源オン時にズームが広角端になってるのがいまいち。スマホのカメラも起動時はだいたい広角側になってるので同じ。

このコンデジは広角は35mm換算で24mm相当になってて、広角側で直線のあるものを撮ると結構歪んでる。少しズーム側に動かすとか、後で中央部分をトリミングするとか簡単に対処できるんだけど、撮って出しで掲載したらそれは気になる。コンデジの電源オン時とか、スマホアプリ起動時は最後のズーム比くらい覚えててほしい。

新聞記事(新聞社の記者が撮ってるようなやつ)なんかですら、人物集合写真なんかだと、どうも広角端で撮っているようで端っこの人がぐにょーてなっててなんだかなーとか思う写真もときどき見かける。

ボリューム歪像とは何か
http://www.dxo.com/jp/photography/…