DirectShowを使いたいのですが、設定がうまくいきません。

環境はWindows VISTA(32bit)
Windows SDK v6.1 ,DirectX SDK (March 2008),Visual Studio 2008

「Windows SDKとDirectX SDKのアップデート(2008/07/12」というページを参考に設定を行い(どこか設定を間違っている可能性はあります)、
MSのヘルプページから、「すべての既定のライブラリの無視」、「バッファセキュリティチェック無効」をし、
http://www.geekpage.jp/programming/directshow/samplegrabber.php
↑こちらのページのサンプルコードをそのままコピペして動かそうとしています。
すると以下のようなエラーが出てしまいます。

error LNK2001: 外部シンボル "__imp__CreateFileA@28" は未解決です。
error LNK2001: 外部シンボル "__imp__CoCreateInstance@20" は未解決です。
……
fatal error LNK1120: 外部参照 11 が未解決です。

おそらくリンカの設定をどこかで間違えているのだと思いますが、自分にはよくわかりません。すみませんが、よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/10/15 14:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:dearna No.1

回答回数3ベストアンサー獲得回数1

ポイント60pt

WindowsSDKのライブラリパスが間違っているか、プロジェクトの設定がWindows用にあってないものと思います。


・ツール→オプションダイアログ内のプロジェクトおよびソリューションにVC++ディレクトリ、という設定項目があります。ここのインクルードファイルとライブラリファイルの内容に、WindowsSDK、DirectXSDKのそれぞれのincとlibへのパスが入っているかどうか確認します。なければ追加をしてください。


・ビルドプロジェクトのリンクファイル設定を確認します。プロジェクトのプロパティ→構成プロパティ→リンカ→入力→追加の依存ファイル、の箇所に使用するライブラリファイルを記入します。この例ではコマンドプロンプト用のプログラムですけど、Windowsの機能を使用する場合、

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

の指定を入力しておくと、必要なWindowsAPIをリンクできるかと思います。


・プロジェクトの文字セットがあっていない事も考えられます。プロジェクトのプロパティ→構成プロパティ→全般→文字セットの項目があります。これが「マルチバイト文字セットを使用する」となっている場合は「Unicode文字セットを使用する」に変更してビルドしてみてください。

id:minami-always

dearnaさん、すばやい回答ありがとうございます。おっしゃるとおりにやってみましたがまだ未解決です(><)

★インクルード&ライブラリファイルは

C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses

C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\Common

C:\Program Files\Microsoft SDKs\Windows\v6.1\Include

C:\Program Files\Microsoft DirectX SDK (March 2008)\Lib\x86

C:\Program Files\Microsoft DirectX SDK (March 2008)\Lib\x64

C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib\x64

C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib\IA64

を指定してありますので大丈夫かと思います。

★リンカの設定では、書いてくださったライブラリはすべてデフォルトで指定されているものですね?DirectShowのMicrosoftのヘルプに「すべての既定のライブラリの無視を選択」とあったのでこれらはすべて無視の設定にしました。無視しない選択にするとなぜかエラーが10個ほど増えるので、無視でいいのかなと思うのですが、僕はWindowsAPIについて全然知らないのでよくわかりません。

★Unicode文字セットに変えたところ、エラーの数が減りました。

依然として以下のようなエラーが出ます。

1>DSpict.obj : error LNK2001: 外部シンボル "__imp__CoCreateInstance@20" は未解決です。

1>DSpict.obj : error LNK2001: 外部シンボル "__imp__CoUninitialize@0" は未解決です。

1>DSpict.obj : error LNK2001: 外部シンボル "__imp__MessageBoxA@16" は未解決です。

1>DSpict.obj : error LNK2001: 外部シンボル "__imp__printf" は未解決です。

1>DSpict.obj : error LNK2001: 外部シンボル "__imp__CoInitialize@4" は未解決です。

1>LINK : error LNK2001: 外部シンボル "_mainCRTStartup" は未解決です。

すみませんが、また対応がわかるものがあれば教えてください。よろしくお願いします。

2008/10/08 22:09:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません