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

解決


たけ  2003-10-09 13:43:54  No: 52259

今、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 21:37:52  No: 52260

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


Gak  2003-10-09 23:12:58  No: 52261

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

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


たけ  2003-10-10 07:18:59  No: 52262

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


Gak  2003-10-10 18:42:01  No: 52263

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

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

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

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


たけ  2003-10-11 11:45:59  No: 52264

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


Gak  2003-10-12 08:22:57  No: 52265

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

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

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


たけ  2003-10-14 11:42:21  No: 52266

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


Gak  2003-10-14 19:21:59  No: 52267

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 12:57:26  No: 52268

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


Gak  2003-10-15 18:14:15  No: 52269

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

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

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


たけ  2003-10-15 19:38:33  No: 52270

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


ボコノン教徒  2003-10-15 20:17:04  No: 52271

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


たけ  2003-10-16 13:58:43  No: 52272

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


ボコノン教徒  2003-10-16 22:20:20  No: 52273

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

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


たけ  2003-10-17 03:21:22  No: 52274

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


たけ  2003-10-17 03:50:21  No: 52275

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


ボコノン教徒  2003-10-17 20:05:47  No: 52276

うーん、よくわからんなあ。
非常手段として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 20:33:48  No: 52277

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


ボコノン教徒  2003-10-17 21:17:25  No: 52278

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

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

CLSID_SampleGrabberも同様。


ボコノン教徒  2003-10-18 01:17:10  No: 52279

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

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


たけ  2003-10-20 09:05:24  No: 52280

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


たけ  2003-10-20 09:06:22  No: 52281

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


a  2004-06-24 03:50:14  No: 52282

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
のプログラミングの準備はしました。
もし、よかったら教えてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加