Windows デベロッパー センター >
Windows クライアント開発 フォーラム
>
Windows クライアント開発 - 全般
>
Microsoft SDKs\Windows\v7.0\Samples\multimedia\directshow\capture\amcap のサンプルが、コンパイルできません
Microsoft SDKs\Windows\v7.0\Samples\multimedia\directshow\capture\amcap のサンプルが、コンパイルできません
Windows SDK for Windows 7 and .NET Framework 3.5 SP1 を、WinXP SP3環境にインストールしました。
Microsoft SDKs\Windows\v7.0\Samples\multimedia\directshow\capture\amcap\amcap.vcproj を ダブルクリックして
VisualStudio2008 SP1 を起動し、ソリューションのリビルドを実行しました。
追加のインクルードディレクトリーは 以下のように相対パス指定になっており、
..\..\Common;..\..\BaseClasses
下記のように、コンパイルは 成功しました。
1>コンパイルしています...
1>amcap.cpp
1>crossbar.cpp
1>SampleCGB.cpp
1>status.cpp
1>stdafx.cpp
1>コードを生成中...
1>リソースをコンパイルしています...
1>マニフェストをリソースにコンパイルしています...
しかし、リンクには失敗します。
1>リンクしています...
1>LINK : fatal error LNK1104: ファイル 'Strmbasd.lib' を開くことができません。
追加のライブラリーディレクトリーは 以下のようになっていますが、
..\..\BaseClasses\Debug\
そのディレクトリーは、存在しません。
また、そもそも、'Strmbasd.lib' というファイル自体が、
Microsoft SDKs\Windows\v7.0 以下の どのディレクトリーにも存在しません。
果たして、どのように 対処すればよいのでしょうか?
回答
- CLのコマンドラインに /D "_UNICODE" /D "UNICODE" の定義されているかどうかってことで。
- 回答としてマークomurata 2009年8月26日 7:02
すべての返信
- ..../directshow/baseclassesをコンパイルして自分で作ります。
- 早速の回答、ありがとうございます。
..../directshow/baseclassesをコンパイルしてみました。
以下のファイルが生成されました。
amextra.obj amfilter.obj amvideo.obj arithutil.obj
combase.obj cprop.obj ctlutil.obj ddmm.obj
dllentry.obj dllsetup.obj mtype.obj outputq.obj
perflog.obj pstream.obj pullpin.obj refclock.obj renbase.obj
schedule.obj seekpt.obj source.obj strmbasd.lib strmctl.obj sysclock.obj
transfrm.obj transip.obj vc90.idb vc90.pdb videoctl.obj vtrans.obj
winctrl.obj winutil.obj wxdebug.obj wxlist.obj wxutil.obj
amcap.vcproj を ダブルクリックして
VisualStudio2008 SP1 を起動し、ソリューションのリビルドを実行しました。
以下のリンクエラーが発生しました。
1>リンクしています...
1>amcap.obj : error LNK2019: 未解決の外部シンボル "void __stdcall DbgAssert(wchar_t const *,wchar_t const *,int)" (?DbgAssert@@YGXPB_W0H@Z) が関数 "int __cdecl AppInit(struct HINSTANCE__ *,struct HINSTANCE__ *,int)" (?AppInit@@YAHPAUHINSTANCE__@@0H@Z) で参照されました。
1>crossbar.obj : error LNK2001: 外部シンボル ""void __stdcall DbgAssert(wchar_t const *,wchar_t const *,int)" (?DbgAssert@@YGXPB_W0H@Z)" は未解決です。
1>SampleCGB.obj : error LNK2001: 外部シンボル ""void __stdcall DbgAssert(wchar_t const *,wchar_t const *,int)" (?DbgAssert@@YGXPB_W0H@Z)" は未解決です。
1>crossbar.obj : error LNK2019: 未解決の外部シンボル "void __cdecl DbgLogInfo(unsigned long,unsigned long,wchar_t const *,...)" (?DbgLogInfo@@YAXKKPB_WZZ) が関数 "public: __thiscall CCrossbar::CCrossbar(struct IPin *,long *)" (??0CCrossbar@@QAE@PAUIPin@@PAJ@Z) で参照されました。
1>crossbar.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall CBaseList::CBaseList(wchar_t const *,int)" (??0CBaseList@@QAE@PB_WH@Z) が関数 "public: __thiscall CGenericList<class CRouting>::CGenericList<class CRouting>(wchar_t const *,int,int,int)" (??0?$CGenericList@VCRouting@@@@QAE@PB_WHHH@Z) で参照されました。
1>Debug\AmCap.exe : fatal error LNK1120: 外部参照 3 が未解決です。 - baseclassesのwxdebug.objあたりがリンクされていれば問題ないはずなんですけど…
- 返答、ありがとうございます。
ちなみに、
\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow
に関しても、同じ事
(まず、BaseClasses を リビルドしてから、AMCapをリビルド)
をやってみましたが、
まったく、同じ リンクエラーが出ました。
どちらの リビルドでも、vcproj を 最初にダブルクリックした時に、変換ウィザードが起動して、変換は正常に行われました。
コンパイルオプションを 調整する必要がある のでしょうか? - baseclassesをUNICODEオプションなしで、AMCapをUNICODEオプション付きでってことはないですよね。
- ありがとうございます。
baseclasses も AMCap も、
「wchar_t をビルトイン型として扱う」を 「いいえ」にして、リビルドしましたが、
AMCap のリンクで 先ほどと 同じリンクエラーが出ました。 - CLのコマンドラインに /D "_UNICODE" /D "UNICODE" の定義されているかどうかってことで。
- 回答としてマークomurata 2009年8月26日 7:02
- 何度も、ありがとうございます。
私の環境では、AmCap を /D "_UNICODE" /D "UNICODE" の設定でコンパイルする必要がある ようです。
それで、baseclasses と amcap と両方とも、 /D "_UNICODE" /D "UNICODE" の設定でコンパイルしました。
そうしたら、うまくゆきました。 - ちょっと気にかかる表現だったのですが、参考までに投稿します。
_UNICODE や UNICODE プリプロセッサ定数は Unicode 文字セットでビルドすることを示します。
これらはプリプロセッサ定数を手で定義するのではなく、プロジェクトのプロパティの 構成プロパティ - 全般 のノードにある「文字セット」の項目で切り替えます。
「マルチ バイト文字セットを使用する」を選択すると _MBCS が定義され、「Unicode 文字セットを使用する」を選択すると _UNICODE と UNICODE が定義される仕様になります。
なお、今回、問題になっていた BaseClasses プロジェクトは構成によって、MBCS (マルチバイト文字セット) かどうかを切り替えられるようになっていますので、上記の設定を手で変更する必要はなさそうです。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。


