WMPHOST

Last-modified: 2008-04-17 (木) 18:45:29

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以下
 

[参照]
調べもの専用Googleブラウザを作ってみよう