Windows デベロッパー センター > Windows クライアント開発 フォーラム > Windows クライアント開発 - 全般 > Microsoft SDKs\Windows\v7.0\Samples\multimedia\directshow\capture\amcap のサンプルが、コンパイルできません
質問する質問する
 

回答済みMicrosoft SDKs\Windows\v7.0\Samples\multimedia\directshow\capture\amcap のサンプルが、コンパイルできません

  • 2009年8月26日 2:15omurata ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    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 以下の どのディレクトリーにも存在しません。

    果たして、どのように 対処すればよいのでしょうか?

回答

すべての返信

  • 2009年8月26日 3:16ふるかわあきひと ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ..../directshow/baseclassesをコンパイルして自分で作ります。
  • 2009年8月26日 4:20omurata ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    早速の回答、ありがとうございます。

    ..../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 が未解決です。
  • 2009年8月26日 4:36ふるかわあきひと ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    baseclassesのwxdebug.objあたりがリンクされていれば問題ないはずなんですけど…

  • 2009年8月26日 5:06omurata ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    返答、ありがとうございます。

    ちなみに、
    \Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow
    に関しても、同じ事
    (まず、BaseClasses を リビルドしてから、AMCapをリビルド)
    をやってみましたが、
    まったく、同じ リンクエラーが出ました。

    どちらの リビルドでも、vcproj を 最初にダブルクリックした時に、変換ウィザードが起動して、変換は正常に行われました。


    コンパイルオプションを 調整する必要がある のでしょうか?
  • 2009年8月26日 5:27ふるかわあきひと ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    baseclassesをUNICODEオプションなしで、AMCapをUNICODEオプション付きでってことはないですよね。
  • 2009年8月26日 5:43omurata ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ありがとうございます。

    baseclasses も AMCap も、
    「wchar_t をビルトイン型として扱う」を 「いいえ」にして、リビルドしましたが、
    AMCap のリンクで 先ほどと 同じリンクエラーが出ました。
    • 回答としてマークomurata 2009年8月26日 7:02
    • 回答としてマークされていないomurata 2009年8月26日 7:02
    •  
  • 2009年8月26日 5:56ふるかわあきひと ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    CLのコマンドラインに /D "_UNICODE" /D "UNICODE"  の定義されているかどうかってことで。
    • 回答としてマークomurata 2009年8月26日 7:02
    •  
  • 2009年8月26日 7:14omurata ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    何度も、ありがとうございます。

    私の環境では、AmCap を  /D "_UNICODE" /D "UNICODE"  の設定でコンパイルする必要がある ようです。

    それで、baseclasses と amcap と両方とも、 /D "_UNICODE" /D "UNICODE"  の設定でコンパイルしました。
    そうしたら、うまくゆきました。
  • 2009年8月26日 14:23AzuleanMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ちょっと気にかかる表現だったのですが、参考までに投稿します。

    _UNICODE や UNICODE プリプロセッサ定数は Unicode 文字セットでビルドすることを示します。
    これらはプリプロセッサ定数を手で定義するのではなく、プロジェクトのプロパティの 構成プロパティ - 全般 のノードにある「文字セット」の項目で切り替えます。
    「マルチ バイト文字セットを使用する」を選択すると _MBCS が定義され、「Unicode 文字セットを使用する」を選択すると _UNICODE と UNICODE が定義される仕様になります。

    なお、今回、問題になっていた BaseClasses プロジェクトは構成によって、MBCS (マルチバイト文字セット) かどうかを切り替えられるようになっていますので、上記の設定を手で変更する必要はなさそうです。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。