Windows Media SDKに付属しているサンプルWMPHOSTを実行するまでの手順について記載します。
[実行環境]
Windows Vista + Visual C++ 2005 Express + Windows SDK for Windows Vista + Microsoft Platform SDK for Windows Server 2003 SP1
[インストールしておくツール]
Visual C++ 2005 Express
Windows SDK for Windows Vist
Microsoft Platform SDK for Windows Server 2003 SP1
多分インストールする順番は関係ないと思います。
[設定項目]
設定内容は以下の項目に分かれます
◇Visual C++ 2005 ExpressでWindows Media SDKを使えるようにします。
インクルードファイルのディレクトリを追加します リンカに依存ライブラリを追加します
◇Visual C++ 2005 ExpressでATLを使えるようにします。
インクルードファイルのディレクトリを追加します。 atlに関連するヘッダファイルを修正します。
◇コンパイルエラーが出るソースを修正します。
[Visual C++ 2005 Expressへの設定内容]
プロジェクトプロパティ→構成プロパティ→C/C++→追加のインクルードディレクトリ
"C:\Program Files\Microsoft Platform SDK\Include\atl"; "C:\Program Files\Microsoft Platform SDK\Include"; "C:\Program Files\Microsoft SDKs\Windows\v6.0\Include"
C/C++コマンドライン
/Od /I "C:\Program Files\Microsoft Platform SDK\Include\atl" /I "C:\Program Files\Microsoft Platform SDK\Include" /I "C:\Program Files\Microsoft SDKs\Windows\v6.0\Include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_VC80_UPGRADE=0x0600" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Fp".\Debug/wmphost.pch" /Fo".\Debug/" /Fd".\Debug/" /W3 /nologo /c /ZI /TP /errorReport:prompt
プロジェクトプロパティ→構成プロパティ→リンカ→入力→追加の依存ファイル
odbc32.lib odbccp32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
リンカコマンドライン
/OUT:".\Debug/wmphost.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:".\Debug\wmphost.exe.intermediate.manifest" /DEBUG /PDB:".\Debug/wmphost.pdb" /SUBSYSTEM:WINDOWS /MACHINE:X86 /ERRORREPORT:PROMPT odbc32.lib odbccp32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib kernel32.lib
[atl関連ヘッダファイルの修正]
◇C:\Program Files\Microsoft Platform SDK\Include\atl\atlwin.h
どの辺を修正したのかよく覚えていないのですが、下記の行を確認してみてください。
1719 for(int i = 0; i < m_aChainEntry.GetSize(); i++) 1730 for(int i = 0; i < m_aChainEntry.GetSize(); i++) 1754 for(int i = 0; i < m_aChainEntry.GetSize(); i++) 1778 for(int i = 0; i < m_aChainEntry.GetSize(); i++)
インストール後のソースはiの型定義が指定されていないためにコンパイル時にiの型が不明というエラーが出ることがあります。その場合には上記のようにint宣言を付け加えてください。
for( i = 0; i < m_aChainEntry.GetSize(); i++)
◇C:\Program Files\Microsoft Platform SDK\Include\atl\atlbase.h
287~293行目を以下のようにコメントアウトしてください。
287 //PVOID __stdcall __AllocStdCallThunk(VOID);
288 //VOID __stdcall __FreeStdCallThunk(PVOID);
289
290 //#define AllocStdCallThunk() __AllocStdCallThunk()
291 //#define FreeStdCallThunk(p) __FreeStdCallThunk(p)
292
293 //#pragma comment(lib, "atlthunk.lib")
[コンパイルエラーが出るソースの修正]
◇resource.hの修正
以下の記述を挿入しました。
#define ID_FILE_OPEN 32908 #define ID_APP_EXIT 32909
◇CWMPHost.cpp
以下の記述を修正します。
if (dlgOpen.DoModal(m_hWnd) == IDOK) ↓ if ( dlgOpen.DoModal(GetActiveWindow()) )
◇afxres.h
afxres.hを以下のような内容で作成します。
#include <windows.h> #define IDC_STATIC (-1)
afxres.hは2か所に置きます。
プロジェクトディレクトリ(cwmphost.hなどが置いてあるのと同じディレクトリ) C:\Program Files\Microsoft SDKs\Windows\v6.0\Include以下