ビジネス WinDbgアプリケーション開発技術 イメージロード(ユーザモードとカーネルモード)


無料開発ツール「Visual C++ 2005 Express Edition」の活用方法

 「Visual C++ 2005 Express Edition」(VCEE)は、前回触れたように、ATLやMFCなどのMicrosoftの独自クラス階層をサポートしていません。それらの独自階層はWindowsアプリケーションを効率的に開発するために必要な機能です。これは事実ですが、しかし、Windowsアプリケーションは、Microsoft独自クラス階層を使用しなくとも開発することができます(参照)。

 無料開発ツール「Visual C++ 2005 Express Edition」の「より実践的な」活用方法と必要知識については、筆者も参加しているRedmondの次のフォーラム投稿記事などに目を通してください。

アプリケーションの配布方法
SxSの基本原理
SxSの基本原理の適応サンプル
WTL 7.5ダウンロード
MASM 8.0ダウンロード


 筆者は、ニュースグループの投稿記事内で次のようなソースコードが紹介されているのを見たことがあります(参照。筆者も時折議論に参加しています!)。
#include <windows.h>

int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpCmdLine ,int nCmdShow)
{
    MessageBox( NULL , "Takashi", "Toyota", MB_OK );
    return 0;
}
 投稿者は、このソースコードをVCEE環境でビルドすると、次のようなエラーが出たと嘆き、問題解決策を尋ねていました。

Error 1 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [8]' to 'LPCWSTR'

 筆者の環境でもこのエラーが出ました。問題解決策については後ほど触れることにし、この単純なソースコードの構造を復習しておきます。

 ソースコードの先頭には、「windows.h」という名前のファイルがインクルードされています。このため、私たちは、投稿者がWindowsプログラミングを学習中であることが分かります。このヘッダーファイルは、名称から分かるように、C/C++標準化委員会が定めたものではなく、Microsoftが独自に用意したものです。このヘッダーファイルがインクルードされていなければ、ソースコード内で記述されているMessageBox関数は意味を持たないことになります。ここでは、Windowsアプリケーションを開発する場合には、Microsoftが用意したヘッダーファイル(と関連ライブラリファイル)を使用する必要がある、という単純な事実を確認しておきましょう。

 さて皆さん、先のエラーをどのように解決しましょうか。解決策は無数存在するといってよいでしょう。一般的には、次のような解決策が考えられます。

MessageBox( NULL , L"Takashi", L"Toyota", MB_OK );

 ご覧のように、表示する文字列の前に、"L"というコードを追加しています。このコードを追加しただけで、"なんとなく動くコード"を作成することはできます。しかし筆者は、C++入門書籍などでは次のような解決策を紹介してほしいと思います。
#include <windows.h>
#include <string>

int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpCmdLine ,int nCmdShow){
   std::wstring firstName = std::wstring(L"Takashi");
   std::wstring secondName = std::wstring(L"Toyota");
   MessageBoxW( NULL , firstName.data(), secondName.data(), MB_OK );
   return 0;
}
 このコードは、次のようなことを強調しています。

・標準文字列クラス(std::wstring)
・標準文字列クラスのインスタンスの作り方(std::wstring firstName = std::wstring(L"Takashi");)
・文字列クラスのインスタンスのメソッド呼び出し(firstName.data())

 無料開発ツール「Visual C++ 2005 Express Edition」の活用方法とは何でしょうか。筆者は、C++標準化委員会が用意したクラスライブラリの使い方と発想を学ぶための道具として利用してしまうとよいのではないか、と考えています。標準ライブラリの使い方をきちんと理解しておくと、次の点がはっきり浮かび上がってきます。

・Microsoftの独自ライブラリの優秀さと異様さが分かる
・アプリケーション開発はライブラリを使うことである
・アプリケーションの開発効率と質は、使用するライブラリに依存する
・将来はライブラリを作る人になりたい!

 標準C++の歴史と哲学、および、CとC++の発想上の違いなどを学習しておきたい人は、筆者のこれらの連載記事に目を通しておくとよいでしょう。ポインターなどは単純なサンプルプログラムとともに、アセンブラーレベルで分かりやすく説明されています。大勢の方が土日などを利用して読んでいらっしゃるようです。基礎固めにお役に立てれば幸いです。
前へ | 次へ



 WinDbg入門  ホーム


Copyright©豊田孝 2004- 2009
本日は2009-01-06です。