プログラミングWindows95 with MFC も読んでみる。

前回のエントリで書いたWin95ペゾルド本よりも先に、しばらく放置していたMFCによるWindows95プログラミング』も読み終えた。これも20年以上前に出た本でWin95向け。この本の次の版がアマゾンではぼったくり価格になってて、今回読んだ第4版は931円とゴミ扱い。(2018/1に見たら4,800円に暴騰してますねー)

MFCProgWin95

「これはMFCに関する本であり、Visual C++の本ではない」!!

だが断る。今回はVisual C++を使う。※当時、Borland C++でOWL以外にもMFCって使えたような。

書籍ではWin95+Visual C++ 4.0を前提に書かれているが、今回はVMware上に構成したWindows 2000 + Visual C++ 6.0の環境を中心にさらった。Visual Studio 2017でも一応MFCサポートはあるのでペゾルド本のWin32 SDKほどマゾっぽくはならなくても済んだかもしれない。

プログラミングWindows95』と装丁は似ているが中身はぜんぜん違ってて、Visual C++に付属するクラスライブラリMicrosoft Foundation Classライブラリの解説書。Visual C++ のIDEの使い方の解説本ではないというのがポイント。ただIDEの解説こそを含んでいないが、サンプルのメイクファイルはVSが吐き出したものを使用しているようでペゾルド本のようにメイクファイルから手書き、というスタイルではないあたりも異なる。(手書きで最低限のメイクファイルを作るとクラスウィザードがきちんと動かない。クラスビューワはなんとなく動く。)

この本でも一応目玉というか実用的サンプルとしてMyWordというリッチテキストビューを主要コンポーネントにした簡易ワープロが掲載されているが、Win32SDKと違って非常に簡単に実装ができてしまう。今回はIDEを使ったのでそれこそサクっとできてしまうが、コードを追いかけるうえではやはり本文くらいの解説があったほうが理解は早い。

myword

本書はペゾルド本と並んでWindowsプログラミングを行ううえで、ぜひとも読んでおきたいもののひとつだし、読み終えてみるとペゾルド本よりだいぶやさしい内容であると分かる。

VC++のIDEを使って本書を読み解くとMFCを縦横に扱う感覚が身について、手書きの写経も良いがIDEを使うのも悪くないなと思えるようになった。

広告

プログラミングWindows95 をVS2017で。

だいぶ前に買って放置していた『プログラミングWindows95』と『MFCによるWindows95プログラミング』をようやく読み切った。2冊合計で2272ページ。

Progwin95andfMFC.JPG

プログラミングWindows95はWindowsプログラミングの最良の書のひとつであるペゾルド本の第4版。『プログラミングWINDOWS3.1』を学生の時に読んでいたのであまり読む気が起きなかった。Win32SDKの開発手法についてはだいたい知ってるし、そのまま写経してもつまらないので、当時の最新鋭Win95+VC4用サンプルを現在最新のWin10 x64+Visual Studio 2017で動かしてみるという明らかにマゾっぽいコースにチャレンジ。定評のある読みやすい本が地獄と化す。

何に苦しむことになるか。

・文字コードが異なる
内部の文字コードがWin95ではMBCS、WinNT系ではUnicodeと異なっていてWin32 SDK自体は一応マクロで切り替わるようになっているが、それを利用するコードや環境もその辺を意識しておく必要がある。基本的にはcharがWCHAR、char*がPWSTRになる。文字化けだけならまだましな方で、string.hで宣言されてるstrcpy系がドはまり。本文中ではstrcpyだけどUnicodeはwcscpyに変更で、かつ後で述べるSDLでさらにハマる。

・Win95とWin10で異なる内部構造
しかも動作環境はWin10でx64。文字コードの他にもメモリ管理やDLL管理その他細かいところが異なっててそのままでは動かないサンプルも。VS2017も既定値はUnicode。文字コードに注意していれば動くものは多いが、特にメモリマップトファイルを使う第19章のSTRPROGは全く動かない。小手先の修正では動かせなくてSTRPROGだけはVS2017版が未完成となった。(本文中でも1062ページでWindows NTでは機能しないと解説されている。)

・VS2007のSDLチェックが有効
SDLチェックが入ってくると文字コードの変更でwcscpyしたものが、さらにwcscpy_sにしないとエラー。wcscpy_sでは戻り値すら異なっている。VS2017ではSDLチェックは既定値でオンなのであえて外さないプレイ。

・VS2017のツールオプション
VS2017についているコマンドラインツール類のオプションもVC4から変わってしまってるのでメイクファイルも修正が必要。LIBC.LIBがなくなっているのでLIBCMT.LIBに置き替える。リンカオプションは簡単になっていて /subsystem:windowsを使うとうまくいく。

・VS2017のWindowsデスクトップアプリケーションのやる気の無さ
新しいプロジェクトのスケルトンを生成させるとコンパイル時にワーニングがでるし、文字化けもする。.cpp、.hをBOM付きUnicodeで、.rcをANSIで保存しなおすととりあえず直る。Win32SDKヘルプがまともに参照できなくて、基本的に英語なのはともかく、.Netなヘルプが出てきたり。やる気なさすぎ。今回はこの厄介なスケルトンを本のサンプルにあわせて変更するという行為を行う。

・その他のレギュレーション
付属CDからのコピペは禁止。そして写経ではないのでVS2017のIDEの機能をフルに使うことにする。本書の冒頭部分20ページに書かれているとおりIDEの解説は一切載っていないし、実際にVS2017が吐き出すWindowsデスクトップアプリケーションのスケルトンのコードを理解するためには、この本の全1150ページ中590ページまで読む必要がある。でもIDEの力を借りれるとそれ以上に効率よくサンプルを消化できるのではないかと思う。プログラミングWINDOWS3.1を読んだときは実際にメモ帳の手書きプロジェクトで通したし、MSC/C++7.0のクソPWB(IDEっぽい見た目のテキストエディタ)ではそれでも良いと思ったが、今それをやり直す気力は起きない。

※実は虫食い的にVMware+Win2000+VC6も使った。こちらのほうが明らかに変更箇所は少なくて、ほぼ問題なく動く。

poppadx64

この本の目玉のサンプル、テキストエディタのPopPadをWin10+VS2017で完成させると、64ビット、Unicode対応のテキストエディタに。

そんなこんなで苦労はしたが、それなりに得られたものはあった気がする。20年も前の本だが、今の環境でもだいたい通用してしまうというのはなかなかすごい。Windowsでプログラムを書く人ならこのシリーズは一読の価値はある。でも前提としている環境はそろえた方が楽だ。

2018/1に確認したらアマゾンではWin95対応の第四版がぼったくり価格になってた。上下巻に分かれてしまったが第五版のがまだ定価より安い。

Windows 10 Enterprise を Fall Creators Update してみる。

なぜか継続的に高アクセス数を記録している Windows Enterprise を Creators Update してみた。のエントリ。これの次のメジャーアップデートとなる1709が昨晩リリースされた。VLSCを確認すると1703のときは後回しだったVL版のEnterpriseが、今回の1709は一般向けと同時に公開されている。

1703のときはバカ正直に自動更新がかかるのを待ってて、いつまで経っても更新がかからなかったので、今回は同じ轍は踏まない。速攻ISOをダウンロードして人柱となる。

→もう一台のEnterpriseでWindows Updateを試したら1709が更新に出てきて、でかいファイルがダウンロードされて「更新して再起動」しても更新できずに失敗。やっぱりISOで更新するのが正解。

windows10vl1709

CDNからの取得は3.7MB/secそれほど遅くはない模様。推定20分程度。ファイルサイズが少しRTMより大きくて、1703より小さい。ファイル名は SW_DVD5_Win_Pro_Ent_Edu_N_10_1709_64BIT_Japanese_MLF_X21-50165.ISO

ISOがダウンロードできたらDVDに書き込む必要も無く、そのままマウントしてsetup.exeを実行。

windows10vl1709-2

普通に始まった。

・・・

なんか「インストールに失敗しました。」とか出てきた!!
びっくりしたから途中のスクリーンキャプチャ撮るの忘れた。

気を取り直してやりなおし。インストール時のオプションで「更新をダウンロードするか」と聞いてくるので既定値の「する」から「しない」に選択を変更したらうまく進んで終わった。

SBなんたら.dllがエラーになった以外は特に問題なさそう。プロパティを確認すると1709に更新されたこと、窓のロゴがなくなったこと、デバイスIDが表示されていることが気になった。→SBなんたら.dllのエラーはSound Blaster PX(USB接続のサウンドアダプタ)のドライバだったのでいったん削除してから再接続したら出なくなった。

windows10vl1709-3.PNG

それと「お使いのPCは監視され、保護…」って書いてある。

お使いのPCは監視され、

お使いのPCは監視され、

お使いのPCは監視され、

;゚Д゚)エエー

 

※このメッセージが意味するのはWindows Defender のステータス表示だが、「システム」のプロパティで出されると別の意味に思えてくる。

インストールが超簡単になったLinux Services for Windowsがどうしようもなく便利すぎるレベル。macosで動かすsshも決して悪くはなかったが、WSLで動くフル構成のUbuntuやsuseを見たら単にsshを動かすだけであっても絶対WSLのがいいって思うハズ。Linux(SystemV風)とは若干距離があるmacのBSD Unix(しかもデフォのツール類は古い)と、WSLのフルに近いLinux環境(apt-getとかで更新もできる)の比較だったら後者のが何かと都合がいい。それにフリーのXサーバ VcXsrvと組み合わせたら、過去最高に便利なWindows環境になった。本当はExceedとかASTEC-Xあたりが欲しい。

端末エミュレータ(ターミナル)とsshが初期状態で使えるだけで「macはディベロッパー向け」とか言っちゃってる層はWindowsでWSLしたほうが幸せになれると思った。

Windows 10 のデジタルライセンスを移動。

1世代前のATOM系PentiumなMini-ITXのデスクトップを3か月ほど使ったものの、操作のレスポンスがやっぱりいまいちで第3世代Coreが使えるMini-ITXのマザーボードをオークションで若干怪しい中国系商社から買い、中身を入れ替えることにした。

一番微妙だったWin10のライセンス移行、次の手順で再認証無しに移行できた。

  1. 対象のライセンスは別のボードでWin7Ultimate→Win10Proに無償アップグレードしていたもの。MSアカウントの紐づけがある状態。
  2. 別のボードからATOMボードへ交換時には移行ツールで紐づけを変更した。電話認証なし。その後数ヶ月使用。
  3. ATOMボードで使っていたSSDを新しいi7マザーへ接続。
  4. セーフモードとかでドライバを更新して、なんとか起動してオンライン状態に。
  5. システムのプロパティで確認するとライセンスが通った状態。
  6. i7マザーからSSDを外して、別のmSATA SSDを接続してWin10Proを新規インストール。
  7. セットアップ後、MSアカウントでログオン、オンラインにするとライセンスが通った状態となっていた。この時点で元のパーツはケースを除いて全く使用していない。

これでライセンスの移行が完了。ポイントは3~4のところで、ライセンスが通っている状態のパーツはSSDしかないのに、ライセンスはそれに乗っかった状態で新しいi7マザーに取り憑いたことになる。

世代も構成も個体も全く違うボードにSSDを載せ替えて再インストール無しに起動できたというあたりの運が良かった。MSアカウントに紐づいているというのも重要なのかもしれない。

無事Win10も正規ライセンスが引き継げたし、ATOM系と違って旧世代でもデスクトップ版i7だけあって操作感も上々。いい感じ。