キャプチャプログラムをコンパイルするには?

解決


たけ  2003-10-09 04:43:54  No: 52259  IP: [192.*.*.*]

今、VisualC++6.0を使って、USB画像のキャプチャをしようとしているのですが、
http://www.katolab.ee.kagu.tus.ac.jp/programing/capture.htm
ここのプログラムがうまくコンパイルできず、
Camera.obj : error LNK2001: 外部シンボル "_CLSID_SampleGrabber" は未解決です
MySampleGrabberCB.obj : error LNK2001: 外部シンボル "_IID_ISampleGrabberCB" は未解決です
Debug/CCameraSample.exe : fatal error LNK1120: 外部参照 2 が未解決です。
というエラーが出てしまいます。きちんと指示どおりやったつもりなのですがどうもうまくいきませんもしよかったらアドバイスいただけないでしょうか?

編集 削除
たけ  2003-10-09 12:37:52  No: 52260  IP: [192.*.*.*]

訂正:USB画像ではなくてUSBカメラの画像です。

編集 削除
Gak  2003-10-09 14:12:58  No: 52261  IP: [192.*.*.*]

ISampleGrabberインターフェイスを使用するには
(多分)DirectX8 以上のSDKが必要だったと思います。

この辺りは問題無いですか?

編集 削除
たけ  2003-10-09 22:18:59  No: 52262  IP: [192.*.*.*]

はい、DirectX9.0と8.1bのSDKでやってみましたが、同様のエラーが出てしまいます。

編集 削除
Gak  2003-10-10 09:42:01  No: 52263  IP: [192.*.*.*]

> きちんと指示どおりやったつもりなのですがどうもうまくいきません

http://www.katolab.ee.kagu.tus.ac.jp/programing/preparation.htm
たけさんがこのURLを参考にしたとして進めます。
上記の内容に加えて以下の設定も行ってみてください。

1、ツール>オプション>ディレクトリを選択
2、「表示するディレクトリ」で「ライブラリ  ファイル」を選択
3、「ディレクトリ」に 「c:\MSSDK\LIB」 を追加して、リストの一番上に移動させる

自分は都合上DirectX7環境を潰す訳にはいかないので動作確認まではできませんが、
おそらく、dxguid.lib 等の必要なライブラリへのリンクができていないのでしょう。

編集 削除
たけ  2003-10-11 02:45:59  No: 52264  IP: [192.*.*.*]

返答遅くてすみません。
そのURLどおりにやりまして、Gakさんの指示通りやってみましたが、エラー内容は変わりませんでした・・・。

編集 削除
Gak  2003-10-11 23:22:57  No: 52265  IP: [192.*.*.*]

dxguid.lib のリンクができていないのだと思ったのだけど・・・違ったかな。

・プロジェクト>設定>リンク>オブジェクト・ライブラリモジュールにdxguid.lib を追加。
・StdAfx.h 辺りに
    #pragma comment(lib, "dxguid.lib")
  を追記。

上記のどちらかをしていますか?

編集 削除
たけ  2003-10-14 02:42:21  No: 52266  IP: [192.*.*.*]

何度もありがとうございます。
>・プロジェクト>設定>リンク>オブジェクト・ライブラリモジュールにdxguid.lib を追加。
>・StdAfx.h 辺りに#pragma comment(lib, "dxguid.lib")を追記。
どちらもやっていなかったのでそれぞれ追加してみましたが、やはり変化はありませんでした・・・。

編集 削除
Gak  2003-10-14 10:21:59  No: 52267  IP: [192.*.*.*]

dxguid.lib では無く strmiids.lib をリンクしてみて下さい。

参考ページ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdx8_c/ds/AppDev/Build_Environment.asp

編集 削除
たけ  2003-10-15 03:57:26  No: 52268  IP: [192.*.*.*]

Debug/CCameraSample.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
コレを含めエラーが22個出てしまいました。strmiids.libでは無いようです。

編集 削除
Gak  2003-10-15 09:14:15  No: 52269  IP: [192.*.*.*]

ありゃ、違いましたか。
動作確認をできない自分がこれ以上言っても見当違いな事を連発しそうですね。

たけさんが参考にしたページにはBBSがあるようなのでそちらで聞いてみてはいかがでしょう。
http://www.katolab.ee.kagu.tus.ac.jp/index.html

振り回す形になってしまって申し訳無いです。

編集 削除
たけ  2003-10-15 10:38:33  No: 52270  IP: [192.*.*.*]

振り回すなんてとんでもないです。
もうちょっと頑張ってみます。本当にありがとうございました。

編集 削除
ボコノン教徒  2003-10-15 11:17:04  No: 52271  IP: [192.*.*.*]

VC++付属の古いライブラリをリンクしてませんか?
VC++付属のDirectXのライブラリはDirectX7.0以前なので
SampleGrabberを含みません。

編集 削除
たけ  2003-10-16 04:58:43  No: 52272  IP: [192.*.*.*]

今、DirectX8.1SDKにリンクしているのですが、それとは違うのでしょうか。もし見当違いのことを言っていたらすみません。

編集 削除
ボコノン教徒  2003-10-16 13:20:20  No: 52273  IP: [192.*.*.*]

ライブラリディレクトリのパスはDirectX8.1SDKのLibとBaseClassesのLibが
優先してますよね?

VC++のメニューの「ツール」ー「オプション」−「ディレクトリ」で確認。

編集 削除
たけ  2003-10-16 18:21:22  No: 52274  IP: [192.*.*.*]

優先というのは、上に置くということですよね。
それでしたらやっているのですが、エラーになってしまいます・・・。

編集 削除
たけ  2003-10-16 18:50:21  No: 52275  IP: [192.*.*.*]

DirectX8.1SDKの中にSampleGrabberではなく、Grabberというのがあるのですが、これは関係ないのでしょうか?

編集 削除
ボコノン教徒  2003-10-17 11:05:47  No: 52276  IP: [192.*.*.*]

うーん、よくわからんなあ。
非常手段として2つのシンボルを直接定義しちゃうとか。
qedit.h  を見ると
IID_ISampleGrabberCBは 0579154A-2B53-4994-B0D0-E773148EFF85
CLSID_SampleGrabberは C1F400A0-3F08-11d3-9F0B-006008039E37

static const GUID <<name>> = 
{ 0xaaaaaaaa, 0xbbbb, 0xcccc, { 0xdd, 0xee, 0xff, 0xaa, 0xbb, 0xcc, 0xdd, 0xee } };

の形式で。

編集 削除
たけ  2003-10-17 11:33:48  No: 52277  IP: [192.*.*.*]

ボノコン教徒さん、すいません・・・。
それはどのようにすればよいのでしょうか?

編集 削除
ボコノン教徒  2003-10-17 12:17:25  No: 52278  IP: [192.*.*.*]

static にする必要もないか。
どこかのソースに以下を埋め込む。

const GUID IID_ISampleGrabberCB = 
{ 0x0579154A, 0x2B53, 0x4994, 
   {0xB0, 0xD0, 0xE7, 0x73, 0x14, 0x8E, 0xFF, 0x85}};

CLSID_SampleGrabberも同様。

編集 削除
ボコノン教徒  2003-10-17 16:17:10  No: 52279  IP: [192.*.*.*]

strmbase.lib(デバッグ版はstrmbasd.lib)は DirectX8.1SDK
で自力でビルドしてからリンクしてますか?
今、初めて気がついたんだが、8.1以降ではstrmbase.libを自力で
作らなきゃいけないみたい。

samples\Multimedia\DirectShow\BaseClasses  を自力でビルドして
出来上がったstrmbase.lib(デバッグ版はstrmbasd.lib)をリンクして
くださいな。

編集 削除
たけ  2003-10-20 00:05:24  No: 52280  IP: [192.*.*.*]

お返事遅くなりました。
>非常手段として2つのシンボルを直接定義
これで実行する事ができました。(strmbasd.libはリンクしてありました。)
ありがとうございました。

編集 削除
たけ  2003-10-20 00:06:22  No: 52281  IP: [192.*.*.*]

解決のチェック入れ忘れました・・・

編集 削除
a  2004-06-23 18:50:14  No: 52282  IP: [192.*.*.*]

http://www.katolab.ee.kagu.tus.ac.jp/programing/capture.htm
のプログラムをビルドすると

fatal error C1083: インクルード ファイルがオープンできません。'stdafx.h': No such file or directory
cl.exe の実行エラー

と出ます。これはどのようにしたらエラーが出なくなりますか?
MySampleGrabberCB.hをヘッダーファイル、
MySampleGrabberCB.cppをソースファイルにするというやり方では間違えているのですか?
http://www.katolab.ee.kagu.tus.ac.jp/programing/preparation.htm
のプログラミングの準備はしました。
もし、よかったら教えてください。

編集 削除