2015年09月
MFCのDECLARE_DYNAMICとIMPLEMENT_DYNAMIC
以下のページに書いてることですが、ググってもすぐにはヒットしないようなので、備忘録として残しておきます。
http://www.geocities.co.jp/Hollywood/2358/mfc_2.html
MFCでは、ユーザー定義のクラスをnewする必要があります。
しかし、MFC内部ではユーザーが定義したクラスの名前は分かりようがないので、newするための関数をユーザーが用意する必要があります。
ただし、newの処理をユーザーが直書きするのはめんどくさい。
そこで用意されたのが、DECLARE_DYNAMICとIMPLEMENT_DYNAMICマクロです(と上記ページでは予想しています)。
DECLARE_DYNAMICは、new処理を行う関数の宣言。
IMPLEMENT_DYNAMICは、その関数の定義。
http://www.geocities.co.jp/Hollywood/2358/mfc_2.html
MFCでは、ユーザー定義のクラスをnewする必要があります。
しかし、MFC内部ではユーザーが定義したクラスの名前は分かりようがないので、newするための関数をユーザーが用意する必要があります。
ただし、newの処理をユーザーが直書きするのはめんどくさい。
そこで用意されたのが、DECLARE_DYNAMICとIMPLEMENT_DYNAMICマクロです(と上記ページでは予想しています)。
DECLARE_DYNAMICは、new処理を行う関数の宣言。
IMPLEMENT_DYNAMICは、その関数の定義。
「動的リンクなのに.libファイルが必要なのはなぜか」みたいな話
当たり前な人にとっては当たり前なんだろうけど、自分はずっと混乱してました。
「静的リンク、動的リンク、暗黙的リンク、明示的リンクってなんやねん」みたいな。
その辺の話がやっと理解できたっぽいので、備忘録として残しておこうと思います。
・前提
ライブラリは関数(と変数)の集合です。
関数は、関数名と関数の中身でできています。
・静的リンクと動的リンク
静的リンクはコンパイル時に関数名と関数の中身をリンクします。コンパイル後にライブラリの中身を変更できないので、「静的」と呼ばれます。
動的リンクは実行時に関数の中身をリンクします。コンパイル後にライブラリの中身を変更する余地が残っているので、「動的」と呼ばれます。
静的リンクでは、必ず.libファイルを使います。
コンパイル時にリンクすべき.libファイルを指定します。
一方、動的リンクでは、(Dynamic Link Libraryという名前の通り、)必ず.dllファイルを使います。
実行時にリンクすべき.dllファイルを参照します。
ここまでは比較的分かりやすい話だと思います。
難しいのが、動的リンクには、.libファイルを使う場合と使わない場合があるというところです。
それは、リンクする.dllファイルのファイル名や関数の関数名(以下、DLL情報と呼ぶ)を、呼び出し側の実行ファイルにどう埋め込むのかという点と関連します。
・明示的リンクと暗黙的リンク
.dllファイルを使うリンクには、明示的リンクと暗黙的リンクがあります。
明示的リンクとは、呼び出し側のプログラムのソースコードに、DLL情報を(明示的に)書くことによって、リンクする方式です。具体的には、LoadLibrary()やGetProcAddress()を用います。
一方、暗黙的リンクとは、呼び出し側のプログラムのソースコードにDLL情報を直接書かずに(暗黙的に)リンクする方式です。
暗黙的リンクでは、ソースコードにDLL情報を書かない代わりに、.libファイルをコンパイル時にリンクすることでDLL情報を実行ファイルに埋め込みます。
以上のような事情から、動的リンクには、.libファイルを使う場合と使わない場合があるのです。
・関連記事
http://akasuku.blog.jp/archives/68875230.html
「静的リンク、動的リンク、暗黙的リンク、明示的リンクってなんやねん」みたいな。
その辺の話がやっと理解できたっぽいので、備忘録として残しておこうと思います。
・前提
ライブラリは関数(と変数)の集合です。
関数は、関数名と関数の中身でできています。
・静的リンクと動的リンク
静的リンクはコンパイル時に関数名と関数の中身をリンクします。コンパイル後にライブラリの中身を変更できないので、「静的」と呼ばれます。
動的リンクは実行時に関数の中身をリンクします。コンパイル後にライブラリの中身を変更する余地が残っているので、「動的」と呼ばれます。
静的リンクでは、必ず.libファイルを使います。
コンパイル時にリンクすべき.libファイルを指定します。
一方、動的リンクでは、(Dynamic Link Libraryという名前の通り、)必ず.dllファイルを使います。
実行時にリンクすべき.dllファイルを参照します。
ここまでは比較的分かりやすい話だと思います。
難しいのが、動的リンクには、.libファイルを使う場合と使わない場合があるというところです。
それは、リンクする.dllファイルのファイル名や関数の関数名(以下、DLL情報と呼ぶ)を、呼び出し側の実行ファイルにどう埋め込むのかという点と関連します。
・明示的リンクと暗黙的リンク
.dllファイルを使うリンクには、明示的リンクと暗黙的リンクがあります。
明示的リンクとは、呼び出し側のプログラムのソースコードに、DLL情報を(明示的に)書くことによって、リンクする方式です。具体的には、LoadLibrary()やGetProcAddress()を用います。
一方、暗黙的リンクとは、呼び出し側のプログラムのソースコードにDLL情報を直接書かずに(暗黙的に)リンクする方式です。
暗黙的リンクでは、ソースコードにDLL情報を書かない代わりに、.libファイルをコンパイル時にリンクすることでDLL情報を実行ファイルに埋め込みます。
以上のような事情から、動的リンクには、.libファイルを使う場合と使わない場合があるのです。
・関連記事
http://akasuku.blog.jp/archives/68875230.html
MFCの解析③ ~ダイアログ最小構成~
今回はダイアログの最小構成。
このソースコードを書くのとは別に、以下の作業が必要です。
➀リソースファイル > 追加 > リソース > Dialog > 新規作成
➁リソースビューで、ダイアログにボタン貼り付け
以上です。
「ここからは複雑になるんだろうなぁ」と思っていたら、とっても簡単でした。
Visual Studioが自動生成するMFCプロジェクトは色々と余計なものがくっついているようですね。
このソースコードを書くのとは別に、以下の作業が必要です。
➀リソースファイル > 追加 > リソース > Dialog > 新規作成
➁リソースビューで、ダイアログにボタン貼り付け
以上です。
「ここからは複雑になるんだろうなぁ」と思っていたら、とっても簡単でした。
Visual Studioが自動生成するMFCプロジェクトは色々と余計なものがくっついているようですね。