So-net無料ブログ作成

本のベストセラー

Visual C++ MFC4プログラミング―Visual C++プログラミングの実践テクニック [プログラミング]

著者はマイクロソフトでMFC4.0の開発にかかわった人物で、VC++4.0 とMFC4.0 を使った多くのプログラム例がのっている。
VC++はVC++2.0 から32ビットOSに対応した
MFCはVC++とともに進化して、VC++ではWindows95とNT3.51に対応しており、そのライブラリもコモンコントロールやOLE、OCX、データベースなど多岐にわたったものになっている。
本書では実践的なプログラミング例をめざしているそうで、本文にのっているのはコードの一部だが、CDーROMにたくさんのサンプルコードがついている

1.Visual Stadioの解説
統合開発環境として開発、保守、コンパイル、テストを行える
プロジェクトにかかわるファイルの管理、リソースエディタによる、ビジュアルかつ簡潔な部品管理、OSごとにリリースバージョンを変えた管理ができるなどの利点がのべられている。また世代管理や試作版、社内版などの管理もできる
MFCのソースコードの場所 c:\Msdev\Mfc\Src 
MFCのヘッダファイルの場所 c:\Msdev\Msc\Include ヘッダファイルの先頭AfxはApplication Frameworkの略とXは意味なしだそう
MFCのライブラリアーキティクチャ
 スタティック・・・プログラムサイズはおおきくなるが、インストールが簡単
 ダイナミックリンクライブラリ・・・_USRDLL ライブラリは静的にリンクされるが実行はWindowsDLL
 呼び出し側プログラムとDLLをどちらもMFCで実装し、2者間でMFCクラスを共用し、境界を越えてやり取りするクラス_AFXDLL
DLLライブラリはコアクラスが2つ(デバッグとリリース)データベース、OLE,ネットワークに分かれていて、それぞれにUnicodeバージョンがある
スタティックライブラリもある、ANSIとUnicodeバージョンがある
旧バージョンからの互換性はあるが、VBXをサポートしている16ビットMFC用コードと、ツールバーやステータスウィンドウの描画をサブクラス化している32ビットバージョン用に書かれたコードには互換性はない

2.ウィザードとコンポーネントギャラリー
どちらもコードを自動生成してくれる、ミスがなくせる
どのWindowsプログラムも備えている機能
 メッセージポンプ
 メッセージハンドラ関数
 アプリケーション初期化コード
 アプリケーション終了コード
企業向けの少し高度なプログラム
 ステータスバー
 ツールバー
 状況依存のオンラインヘルプ
市販アプリケーション
 MDI機能
 OLE機能
 フローティングツールバー
 タブ付きダイアログボックス
AppWizardではマウス操作だけでこれらの機能のうち、基本的なものから少し高度なものまで作成できる
プロジェクト種類
 MFC(.exe)・・・実行可能ファイルになる基本的MFCアプリを作成、オプションでさまざまな機能をサポート
 MFC(.dll)・・・アプリケーションではなくダイナミックリンクライブラリを作成、オプションで希望するDLLが作れる
OLE・・・OLEコントロールを作成できる、OLEオートメーションもサポートされている
Application・・・簡単なプロジェクトを作成する。ゼロからコードを作れる、オプションで機能をつけることはできない
Dynamic-Link Library・・・空のプロジェクトファイルが作成され、オプションを設定してDLLを作成できる
Console Application・・・空のプロジェクトファイルを作成し、文字ベースのユーザインターフェースをもっとアプリケーションを作成できる
 Static Library・・・ライブラリ関連ユーティリティを使用して、.libファイルを生成する
 Makefile・・・独自のMakefileをセットアップできる、
 Custom AppWizard・・・任意のステップを定義して独自の画面を構成し、好みのアプリケーションをつくる

AppWizardでMFCを選んだときに選択できる機能について解説してあった
 データベース・・・初歩的な単純なもの
 OLE・・・初歩的単純なもの
 ユーザーインターフェイス・・・ステータスバーや状況依存ヘルプなど
 高度な機能・・・ドキュメントやウィンドウスタイル
 その他・・・コメントの生成をするか?
最後にクラス名を決めるが、この規定実装ファイル名は変更できないので注意すること
この結果生成されるファイル
 アプリケーションのドキュメントクラスの.cpp実装ファイル
 アプリケーションのビュークラスのの.cpp実装ファイル
 アプリケーションのフレームワーククラスの.cpp実装ファイル
 アプリケーションの.cpp実装クラス
 必要なヘッダーファイル
 リソーススクリプト
 モジュール定義ファイル
 Visual C++プロジェクトファイルまたは外部メイクファイル
 サインの変更内容、作業内容を説明するReademe.txtファイル

ClassWizard
C言語からの遺伝のため、.hにクラス定義を.cppに動作をかいてしまうでしょ。だからClassWizardでクラス管理してオブジェクト指向しましょうということらしい。
できるのはクラス作成、クラスインポートなど、.clwには管理情報が書き出される

ブラウザ
自動生成されるコードがあるので、自分がちょっとしたオブジェクトをつくったつもりでも、実は長大なソースコードをもっていたりする。ブラウザはコンポーネントの動きを追跡し書き出す。.sbrと.bscファイルがそれである。
ブラウザファイルを生成するかは「プロジェクトの設定」ダイアログの「ブラウザ情報」の「ブラウザ情報ファイル名」できまる。
使い方はソースコードの任意の識別子の上にカーソルを置いて「Alt+F12」を推すか「ツール」メニューの「ブラウズ」を選択する

コンポーネントギャラリ
複数のプログラムで利用できる機能があつまっているところ。利用方法はコンポーネントにより異なる


3.アプリケーション アーキテクチャ階層
アプリケーションフレームワーク・・・AppWizardで生成される初期化や終了、またはOLE実装や印刷プレビューなどの機能のもったアプリケーションを適切な形で提供する仕組み
そのアーキテクチャ・・・サンプルコードを例に生成されるソースとクラスの解説。
 CDocumentクラス(データ制御)とCviewクラス(データの表示)の解説
CWinAppクラス・・・アプリケーションの出発点になる派生クラスを生成するのに使われる。MFCを利用するとはMFCと共存関係を築き、派生させたものを修正削除してプログラミングを行う
 CwinThredクラス・・・マルチタスクを実現する。Win32sではスレッドはサポートされていない
 CCmdTargetクラス・・・Cになれたプログラマはおそらくメッセージごとに処理を分割するifやswitchのいっぱい入ったプログラムを書いているはず。しかし、MFCはメッセージごとにメッセージマップでクラスに与えられる。このクラスに与える仕組みを支えているのがこのクラス。そのままメッセージマップの解説もあった。Afmsg_.hにはメッセージマップマクロがあるそうな
 CObjectクラス・・・全MFCのルートクラス。機能は4つ。
   メモリー管理・・・すべてのnew deleteがここを利用するのでクラスメモリーの割り当て管理を一元化できる。
   デバッグ機能・・・デバッグビルド時に常にダンプをいれる。スナップショットをいれる。トレースメッセージをとる。 
   シリアライズ・・・ディスクとの読み書きに使う。
   ランタイム型情報・・・オブジェクトの実装時の型をあつめ、整合性をチェックする

アプリケーションクラスの全体像
アプリケーションのロード時に初期化データセグメントで宣言されたすべてのグローバルなものがメモリーに同時に読み込まれる、これはコード内でtheAppクラスと宣言されているもの。
それがすんだらWinMain()関数が呼び出され、Instance()を実行。
設定情報や直前におこなった作業を記録するために、ユーザ作成の.iniファイルを使う方法とWin.iniを使う方法、あとレジストリを使う方法がある。
Instance()が終了したらコマンドライン引数の処理
Run()でメッセージポンプが動き出す
WM_QUITメッセージでExitInstance()が呼び出され、ステータスコードを返す。
すべてのオブジェクト(theAppも含む)のディストラクタが実行される   
   
  
4ドキュメント/ビューアーキテクチャ
ドキュメントとビューは情報の格納とロード、情報の提示についての機能をもっている
ドキュメントはデータを管理するコード、MFCではドキュメントクラスで実装
ビューはユーザーのためにドキュメントをレンダ(描画の広い意味)するコード、MFCではビュークラスで実装
AppWizardではSDIは1対のドキュメントとビューを、MDIは1対以上のドキュメントとビューを生成する
SDIとMDIのCwinAppからのオブジェクトの生成表が載っていた。

いろいろなビュー
Cview・・・基底クラス CScrollView…スクロール CEditViewとCRichEditView・・・エディットコントロールを使用してスクロールと置換/検索機能のあるテキスト編集ビューを実現 CFormViewとCRecordView・・・ダイアログテンプレートを使ってビューのクライアント領域にダイアログを描く
CTreeViewとCLIstView・・・階層データをツリーコントロールの形で表現、Listは自由形式コントロールで表現できる

ドキュメントの種類
ほとんどの場合CDodumentoクラスがベースになっているが、AppWizardでOLEサポートレベルが選択されたときには、COleServerDocから派生したビューを使うことがある

ドキュメントはどのビューにレンダされるかしらないといけない
ビューはドキュメントにアクセスしなければならない
これを提供するMFCの機能(CSingleDocTemplate)の解説(サンプルコードをもとに)
同様にMDI(CDicTemplate::CreateNewFrame())での解説

ドキュメントクラス解説・・・ドキュメントは器、アプリケーションが使用すると決めたファイルフォーマットを格納・ロードする。ユーザインターフェイスは持たない
ビュークラス・・・描画領域がドキュメントのデータより大きいときの注意、コントロールベースのビュー解説
ドキュメントとビューの対話・・・うまくいくためにはドキュメントがデータを幾通りかの異なるフォーマットで提供できることが必要。ビューに便利な形式ページ単位などでデータが提供できることが必要。ドキュメントとビューはUpdateAllViews()で更新を通知し合っている
ドキュメント/ビューを使わないほうがよいケース・・・維持管理するデータをもたないもの
テンプレート・・・CWinApp::AddDocTemplate()でテンプレートがリストに登録され利用できるようになる
フレームの役割・・・フレームウィンドウとビューの関係解説

5.MFCでのダイアログとコントロールの使い方
Windowsプログラミングで一つのウィンドウですべての機能を提供するのは無理、状況によってダイアログボックスを開いてユーザーとの対話を行うのが普通

ダイアログの種類
要求ダイアログ・・・ファイル名を指定して実行のような、コマンドのパラメータを引渡したり、新しいステータスなどをいれる
通知ダイアログ・・・印刷の終了など状況を伝えるもの、通常OKやキャンセルしか持たないダイアログ
変更ダイアログ・・・状況の通知を伝えるだけでなく設定の変更のチャンスも与えるもの

作成
リソースエディタで行う
実体化
CDialogクラス(CWndとCCmdTargetからの派生クラス)を派生させて作るのが普通。
テンプレートを使用してインスタンスを作成する方法(CDialog)とWindowsAPI DialogINdirect()を使う方法がある

モードレスダイアログ・・・ダイアログを終了しなくても他のウィンドウにフォーカスを動かせるダイアログ。削除に問題が起こることもある

ダイアログのコントロールは自動生成されない。ダイアログの表示速度が落ちるから。使うときに作成する
ダイアログで使うコントロールの解説
エディット、 コンボボックス、リストボックス、ボタンコントロール、スタティックコントロール

ダイアログのデータエクスチェンジ(DDX)
ダイアログボックスから情報をとりだすとき、不正な値を受けないようにし、不正な値のあるコントロールにフォーカスを移し、エラーメッセージを出すなどの処理は共通。この開発を容易にするのがDDXとDDV(Dialog Data Validation)。これでプログラム内の変数とダイアログボックス内のコントロールの間で情報をやり取りするマクロをカプセル化できるし、値の範囲も指定してエラーも出せる

ClassWizardを使ったDDXとDDVの実装を解説。メンバ変数の管理も簡単になる

コモンダイアログ
ユーザにフォントを尋ねるなど、Windowsアプリケーションで頻繁に利用されるであろう機能をダイアログで提供したもの。この使い方を解説

6.ユーザインターフェース
ユーザが自分だけなら話は簡単だけど、実際はそうではない。ユーザの要求を満たす、あるいは予期されない使い方をされることを覚悟して作る。
プロパティシートを使ったユーザインターフェースの解説
作成はダイアログエディタでできる。体裁は一貫性をもって(シートの大きさは必須)
CPropertySheetクラスを使う。入力値はDDXを使って取得、ページが移動する前にDDV関数を使って正当値チェックを行うコードが必要
プロパティシートをウィザードとして使う方法

独自のユーザインターフェース描画方法解説・・・CDCを使うなど
分割ウィンドウ解説・・・CSplitterWnd

7.高度なユーザインターフェースプログラミング
でもあまり大胆に変更しないでね。
すべてのウィンドウベースのクラスCWndの解説。CWndはシステムレベルメッセージを受け取れる
CCmdTargetがメッセージがどのウィンドウに行くかさばき、CWndはメッセージプロシージャーを持つ
サブクラス化・・・ウィンドウの特定のインスタンスについて特別なメッセージハンドらルーチンを用意することを指す。
ダイアログを描画するときはダイアログは動的座標をとっていることに注意
コモンダイアログに独自コードをくみこんで機能を追加する方法
ウィンドウのクライアント領域が小さすぎて情報を十分表現しきれないとき、フレームウィンドウやキャプション、境界線描画方法を変えることで特別な情報を表す方法
動的メニューポップアップメニューの作成方法・・・CMEぬEditorDlgを使い、TrackPopupMenuで表示、メニューをMFCに認識させるにはIDをきめてON_COMMAND_RANGE()マクロとON_UPDATE_COMMAND_UI_RANGE()を使う
適切なクラスがない場合はサブクラスを使う・・・SDK方式、MFCオブジェクト方式、が解説されていた

8.Windowsコモンコントロール
5章でとりあげなかった、Win95とNT3.51が発売されたとき追加されたコントロールとMFCだけで実装されているいくつかのコントロールを解説

DLLは Comctl32.dll でこれが付け加えられるとダイアログエディタのコントロールパネルにアイテムが増えているのがわかる。なお、リッチテキストエディットコントロールだけは複雑なので別DLLRiched32.dllになっている。
どのコモンコトロールがどのクラスにラッパされているかの解説表。
旧MFCではToolBarとStatusBarはMFCにコードがあったが、Windowsのコモンコントロールに変更された。

ヘッダ Msdev\Include\Commctrl.h リッチテキストエディットコントロールはRichedit.h
MFCラッパを取得するのは Msdev\Include\Afxcmn.h リッチテキストエディットコントロールはAfxrich.h
使い方は他のコントロールと同じ

コモンコントロールからの通知メッセージは WM_NOTIFY 通常のWM_COMMANDと重なるとメッセージが過負荷状態になると思われるため。
WM_NOTIFYの構造体とサブセットの解説表(コモンコントロール共通なもの)
コモンコントロール共通でないそのコントロール特有のメッセージなら、その構造は違う。詳細な解説があった。
また、そのメッセージを手作業でメッセージマップに追加する方法が解説してあった。

MFCではAfxcmn.hを参照しておけば、ライブラリのロード時に初期化がおこなわれるので、::InitCommonControls()は必要ない

イメージリスト・・・Windowsでイメージのリスト管理をしくじると、メモリーリークを起こしたり著しくリソースを使ってしまうので、提供されているもの。イメージのサイズや透過などを指定する。
リストビューにアイコンを表示するサンプルが解説されていた。アイコンはイメージリストに入っている。

リストビューにレポートビューを表示する方法が解説されていた。
そのほかリストビューの項目解説
リストビューで独自ソートをする方法
リストビューには必要なテキストだけを表示するからメモリーを無駄遣いしない
リストビューで読み込んだ文字列を処理するとき、他のメッセージがきて読み込んだ文字列がコピーされてしまうことがあるのでそれを防止する方法
コントロール内のラベルをリストビューを使って編集する方法

アップダウンコントロール・・・数値調節に使われるスピンボタンとも呼ばれるもの。スピンボタンと関連付けられているコントロールはスピンボタンの「バディ」と呼ばれる。この関連付けを明示的にしたいときにはスピンボタンのプロパティにあるスタイルの自動関連付けで行う。
選択できる数値範囲は-32768から32767(執筆時点)、ボタンの加速時間を指定できる

スライダコントロール・・・メモリ月の木道場を移動できるコントロール
範囲を要素からー1することに注意
スライダへのポインタはCScrollBarポインタをCSliderCtrlに変換してすませないで!これでも動くが醜悪
まずpScrollBarオブジェクトのダイアログIDを取得してそのIDでGetDlgItem()を呼び出す。

プログレスコントロール・・・動作の実行中に表示し完了までの間隔を表示する。範囲の指定以外はとくに設定はない。

アニメーションコントロール・・・.aviファイルの再生をする。ただし再生できない.aviファイルもある。(多いらしい)スタイルに「中央」を指定しないと、ウィンドウいっぱいに再生するので注意。「透過」スタイルあり。再生は別スレッドで実行される。

ツリービューコントロール・・・情報を階層的に表すところがリストボックスと違う。項目の挿入や、構造体解説。サンプルで通知メッセージのハンドル方法と、子項目の追加方法、項目を探すときのアルゴリズムの解説

ホットキーコントロール・・・特定のキーの入力をショートカットとして受け入れる場合などに使う。SetRules()メンバではユーザの選択を妥当な範囲にとどめることができる。

ヘッダーコントロール・・・どのウィンドウにもヘッダを作成できる。サンプルで方法を解説メモリの取得と解放が必要

ツールヒント、ツールバー、ステータスバー・・・旧MFCでCStatusBarとCToolBarオブジェクトを置き換えるコントロール

タブコントロール・・・CPRopertyPage やCPropertySheetに似ているが、作成されるのはタブだけで、通知メッセージにあわせて手で書く

リッチテキストエディットコントロール・・・コントロールがビューにどう埋め込まれるかわからなければ使えない非常に複雑で強力なエディットコントロール。文字書式、段落書式などが指定できる。そのシリアライズではCRichEditDocクラスにある余分なデータ要素をすべてシリアライズしてから基底クラスのSerialize()を呼び出す。

コモンコントロールでないもの、チェックリストボックス解説


9章 Windows95シェルプログラム作成
MFCではシェルを扱うものはこの時点ではなかった。知識としての解説。主にファイル操作

win95からタスクバーが表示されるようになった。それが表示/非表示が選べて、移動できるのでアプリケーションの描画領域が影響をうけるようになった。Win3.Xのコードはバグになる可能性がある。

シェルはユーザーとOSの間にはいるもの。
シェルへのアクセス方法は2つOLEインターフェースかAPI
API・・・ファイル操作のAPI解説 *の使い方や、NULL文字の入れ方。存在していないファイルを指定すると作成もできるが、作成成功かは自分で確かめるなど
OLE・・・IShellFolderインターフェースでフォルダ操作の方法を解説

ファイルシステムインターフェースの新しいメタファ シェルネームスペース(デスクトップにあるゴミ箱とかのフォルダ)解説

APIやOLEインターフェースで返されたリストはメモリーに格納されるので解放を忘れないこと。
::SHGetMalloc() Relese()
::SHGetSpecialFolderLocation() Free()

タスクバー通知領域・・・ユーザーがシステム全体の設定を調べることのできる場所
タスクバーアイコンを扱うAPI・・・::Shell_NorifyIcon()

Win95はUnicodeはサポートしていないので、多国語対応にしたいときはTCHAR-マクロを使う


第10章 ユーティリティと例外クラス
他のデータいれるコンテナとして使われるクラス
MFCのCExceptionクラス
MFCファイル入出力クラス
MFCコレクションクラス
MFCデータ構造

CStringクラス・・・ユーザが文字列を使うときメモリの割り当てをきにしなくても、メモリには最適なサイズのバッファを割り当てられる。作成した時点でCStringオブジェクトは空。NULL文字が格納されたらそれは1バイトのメモリがある。割り当てたメモリを開放するのはCString::Empty()で解放できる。また破棄されるときは自動的にメモリが解放される。こちらが自然。CString文字列をとりだして通常文字列に使う方法として、CString::GetBufferを使用する方法がのっていた。
CStringの検索Findメンバ関数、内容操作GetAt()、SetAt()関数、MId()、Left()、Right()文字列より大きなところを検索しないように注意。
CStringの変換関数解説 MakeLower() など
CStringの文字列比較解説、演算子、Compare() など
CString書式整形 Farmat()解説
CString::LoadString()でアプリケーションのリソーステーブルから文字列をロードすることができる。

データ構造体のラッパ
Windowsでは座標や矩形などの幾何学データを使う。この支援機能がMFCに用意された。その解説
点座標CPointクラス
サイズCSizeクラス
矩形CRectクラス

タイムバリューの操作
CTimeクラス解説 1970年から2038年までの日付しか扱えないそれ以上はCOleDataTimeクラスを使う

例外処理
エラー処理機構の隠ぺい、エラー発生時の処理コードをの一元化、例外ハンドラの解説
CExceptionクラスを基本とする例外処理クラスの解説
例外処理には、MFCと標準C++があって、C++を推奨していた。オブジェクトの廃棄が確実なのだそうだ。
オペレーションの例外うける_try _except()
実際の例外の例

コレクションクラス
MFCでは独自に3種類のデータ構造、リスト、配列、マップ(検索機能にすぐれている)を準備。
そして2種類のバリエーションがある。型保証付きクラスと従来のクラス
それぞれの操作方法、メモリ管理、特徴を解説

ファイル
MFCをつかうと、ファイルに関連するオブジェクトと何らかのデータ構造の管理をMFCにまかせることができる。特定のアプリケーションに必要な作業を解析、またはフォーマットするメンバ関数を実装するクラスを派生させることができる。
CFileクラスが基底クラス、バッファを使わずWinAPIを使う。CFileクラスの使い方、メンバ関数解説。
CStdioFileクラス、CFileクラスから派生。バッファ入出力ルーチンを使用できるので、区切り文字を見つけるために効率よく先を見通すことができる。行端がみつかる、ReadLineで1行分読み取ることができる。ファイルの終端を超えて読むとNULLを返す。
CMemFileクラス CSdioFileクラスから派生。プロセス間通信のメモリーファイルにつかう、本物のファイルを装ったメモリー上のブロックでディスク上に格納されない。
WindowsNTのNTFSに保存されていればファイルにセキュリティをかけることができる。

その他
ウェイトカーソルの意味と変更の仕方
エラーメッセージ APIでエラーが圧制したら直後に::GetLastError()を呼び出すと対応するエラーコードがわかる。


11章 マルチスレッドアプリケーション(Win32sではサポートされていないので注意)
Win32プログラマにとってスレッドとはなにか
 スレッド・・・実行中のプログラムが必要とするもっとも基本的情報。
 スレッドコンテキスト・・・ユーザモードのスタック(サブルーチン戻りアドレスなど)とカーネルモードのスタック(割り込みサービスのアドレスなど)CPUはこれとスレッドコンテキスト保存したり呼び出したりして実行スレッドを切り替える
 スレッド優先度があり設定できる。あげっぱなしだとほかのスレッドに制御がうつらないので注意
 プロセス・・・OSがもちいるあいまいな単位。一つ以上のスレッドで成り立つ。最初に起動されるのはプライマリスレッドと呼ばれる。
 マルチスレッドが不適切な場合・・・本当に使う必要性がなければ、アプリのパフォーマンスが下がるだけ。Win32からはウィンドウだけでなく、スレッドにもメッセージが送れるようになった。
 マルチスレッドが適切な場合・・・内部処理も多く、外部と通信もある場合など。

スレッドの作成方法
 MFCを使う方法(CWinThread)。特定のウィンドウのイベントを専門に処理するのに適している。 MFCでWin32APIを使う方法。バックグランドで検算や印刷をおこなうワーカスレッドにはAfxBeginTheread()が適している。
スレッドで同期をとる方法・・・同期オブジェクト(クリティカルセクション、ミューテックス(シングルロック、マルティブルロック) セマフォ、イベント)
デッドロックに注意する

Windowsに用意されている待機可能オブジェクト 
変更通知オブジェクト
コンソール入力通知オブジェクト
プロセスオブジェクト
スレッドオブジェクト

オブジェクトを複数のスレッドで使う場合には注意が必要、基本的にはほかのスレッドのオブジェクトにはメッセージを送るしかできない。しかしWindowsレベルでは制限はない。

マルチスレッドアプリのデバッグには、ブレークポイントを多用してスレッド起動直前と直後など細かく見る必要がある。

プロセス
CreateProcess()の使い方。引数説明

マルチスレッドプログラミングの要点
本当にマルチスレッドが必要か?
エラーが発生した時スレッドをどう終了するか
スレッドからその親スレッドにどうやって情報を渡すか
スレッドがブロックされるのはどのような状況か
ユーザーがアプリケーションを突然終了したときスレッドをどう処理するか。

 
12章ダイナミックリンクライブラリ
スティックライブラリ・・・リンカによって実行形式に追加されたライブラリ
ダイナミックリンクライブラリ・・・最初の参照で自分自身をロード、必要なくなると自分自身をアンロードする。DLL拡張子が多いがOLEコントロールはOCX 16ビットのシステムDLLはEXE

DLLの約束
初期化DLLMain()関数はロードとメモリ解放直前に呼び出される。名前は変えられる。
ワーキングセット・・・プログラムによって現在使われているメモリーページの集合体
WindowsがDLLを探すルール
明示的リンク・・・::LoadLibrary()を使って引数のDLLをロード、エクスポートしておいて::GetProcAddress()で呼び出し
黙示的リンク・・・インポートライブラリを使う

DLL構築方法
C++でDLLを使う方法
MFCでDLLの作成方法と使用方法 AFXDLL

デバッグする場合にはデバッグ情報のあるDLLが必要

DLLについて知るコマンド「Dumpbin」

VC++のリンクについて
ランタイムオプションで、マルチスレッドかどうか、スタティックランタイムライブラリかダイナミックリンクランタイムライブラリかを選ぶ。
Gyオプション・・・リンクするとき必要な部分だけをリンクする。MAPオプションだと確かめられる。

13章データベースアプリケーション
ODBC・・・データアクセスのための1組の標準関数を定義。ベンダが用意したドライバとデータソースが通信する。多少のパフォーマンスが犠牲になるが、アプリからはODBCドライバを呼び出すだけでよい。
データソース・・・データソースはコントロールパネルから作る。システムのデータソースを作ってほかのユーザーと共有することもできる。実際にはデータソースとODBCを結ぶリンカが作られる。プログラムからも作れる。
CDatabaseクラスを使う。

DAO・・・OLEオブジェクトとJetエンジン、ドライバを使ってデータベースとやり取りする。(DAOSDKとは別のもの)ワークスペースオブジェクトを使ってデータベースを操作する。
CDaoDatabaseクラスを使う。

トランザクション処理をこれらクラスにまかせることでデータベースの整合性が簡単にとれる。
ODBCAPIを使う方法
両方の方法でレコードセットを扱う方法を解説
DAOに特有のクラス解説
AppWizardでデータベースオプションを使う方法。

14章OLEコンテナの作成
OLE・・・プロセス間の連携を実現する方法
OLEオブジェクトとC++オブジェクトは別なので混同しないこと。メソッドも違うので気をつける。
OLEコンテナアプリケーションの種類 汎用OLEコンテナ、専用OLEコンテナ
汎用OLEコンテナはアプリケーションにオブジェクトとして挿入して丸ごと使える。専用コンテナではOLEオブジェクトを特定の目的で使う。
OLEアプリケーションをAppWIzardで作る方法 でも用意されるのはコーディングの準備だけ
OLE起動 AfxOleInit()→::OLEInitialize()→OLEを使った処理→::OLEUnInitialize()
インターフェース IUnknownだけは実装の必要がある
インターフェース作成 オブジェクトの作成→インタフェース実装
埋め込みオブジェクトとして扱われる。
レジストリはシステムに登録されているOLEオブジェクトに関する情報を格納している。ここにCLSIDも入る。
OLEDocumentクラスを使った例
埋め込み先がアクティブでなくてもユーザーがオブジェクトを操作するプログラム例
編集や、ドラッグドロップの使い方例

OLEオートメーションをサンプル(Excelと対話するMFCプログラム)を使って説明
OLEオートメーションはユーザーインターフェイスをもたない。

OLEコンテナを使うときはドキュメント/ビューアーキテクチャを使うのがよいと書いてあった。


15章 OLEサーバー
再利用可能なオブジェクトを独自に作成しOLEサーバーとして利用する
レジストリに登録して使う。またはアプリで自動的に登録して使う
サーバーアプリケーションではサーバー側のドキュメント基底クラスはCOleServerDocを使う。
その他シリアライズや更新の方法

OLEアプリデバッグは「OLE RPCデバッグ」を使う


16章 OLEコントロール
VBXはVisualBasicカスタムコントロール。
いまやそれはOLE技術をベースにしてOLEコントロールに進化して、いろんなプログラミング環境にサポートされている。
OLE ControlWizardを使用してカスタムコントロールを作成する方法
 プロパティの追加、管理方法。メソッド持たせ方、イベント追加方法
作成するOLEコントロールはDLLになる。

サブクラス化コントロール作成方法
コントロールのライセンス処理
コントロールのバージョン管理
置き場所
テスト方法「OLEコントロールのテストコンテナ」を使う


17章 OLEコントロールコンテナ
コードとユーザーインターフェイスツールを再利用する強力な手段。
コンポーネントギャラリを使ってオブジェクトにOLEコントロールを追加する方法
そのコードを使ってMFCコードのメカニズム解説
コントロールの動的作成方法 コントロールの投げてよこすプロパティやメソッドはタイプライブラリから得る
OLEコントロールでのシリアライズ、ドキュメント/ビューの使い方



Visual C++ MFC4プログラミング―Visual C++プログラミングの実践テクニック (Programmer’s SELECTION)

Visual C++ MFC4プログラミング―Visual C++プログラミングの実践テクニック (Programmer’s SELECTION)

  • 作者: マイク ブラザック
  • 出版社/メーカー: 翔泳社
  • 発売日: 1997/03
  • メディア: 単行本



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。