LoginSignup
4
1

More than 5 years have passed since last update.

[C++] DirectShowを使おうとして軽くハマった話

Last updated at Posted at 2018-07-23

0. TL;DR

DirectX SDKを入れたのにコンパイルが通らないと思ったら,
リンカに, dshow.libが依存するlibを指定し忘れていてコンパイルできなかっただけだった...

1. はじめに

どうも皆さん, C++ビギナーです.
普段はC#を使っているのですが, 今回仕事の都合でC++とDirectShowを使うこととなり勉強を開始しました.

C++は大学生の時分に舐める程度やったのですが, もはや頭の中にはほとんど知識は残っておらず, DirectShowなんて今回初めて存在を知ったため, 内心ビビりまくりで28歳最後の夏を過ごしております.

そんな中, 意気揚々とWin32アプリのプロジェクトを作成して #include "dshow.h" と書き込み,
鼻歌交じりでコーディングをしていざコンパイルをしてみると"エラー"の嵐が...

2. エラーとの闘い その1

エディター上ではエラーが発生せず, LINKエラーが大量に発生していたため「pathが通っていないのか?」と, まずはパス回りを確認.
とりあえずはヘッダへのパスもライブラリへのパスもデフォルトでちゃんと通っているようだ!と思いつつ, dshow.libなるライブラリがないことに気付く.

ここで「新しく支給されたPCだから, DirectX SDK 入れてないだけやんけ!!」と考え, 急いでDirectX SDKを
インストール. これでコンパイルが通って, サンプルコードもちゃんと動けば完璧だ.

しかし, 現実はそう甘くはなかった...

3. エラーとの闘い その2

お茶を一口啜りながら優雅にコンパイルを実行. あとはサンプルアプリの起動を待つばかり...
だがそこで現れたのは憎きエラーメッセージの山!!!!

最初よりは少なくはなっていたが, それでもエラーが出てくるのは気にくわない.
しかも出てるエラーがまたもやLINKエラー!! DirectX SDKは入っているはずなのになぜ...
ライブラリのフォルダを見てみると, そこにはちゃんと dshow.lib があった. ならばどこに問題が?

ここから長い旅が始まる...

CoCreateInstance()でエラーが発生しているようだったので, Google先生に質問してみる.
目ぼしいサイトを見てみては, 解決方法を試みるも失敗の連続.
あぁ, 僕はなんて神様に嫌われた技術者なんだ. 考えているうちに時間だけが過ぎ去っていく.

4. そして解決へ

一度, 初心に戻り DShow.h の公式ページへ行ってみる.
すると, "DirectShow uses the static library files shown in the following table."なる文言が見えた.

ここの文章から察するに, Strmiids.libQuartz.libもないとダメそうな書き口だ.
そこで僕はおもむろに,

[プロジェクト]->[プロパティ]->[構成プロパティ]->[リンカ]->[入力]->[追加の依存ファイル]

に上の2つのライブラリ名を入力し, コンパイルを実行した.

すると見事にコンパイルが成功し, 無事サンプルコードが動き出したではないか!!

5. おわりに

C++を愛用している人たちからすれば当たり前の設定なのかもしれませんが, 畑違いの僕には何がなんだかわからず絶望しかけました. やはり慣れない言語を使うのは中々に難しいですね.
ただ, DirectShowを使ってのデバイス制御系のプログラミングは今まであまり触れてこなかった分野であるので, 日々新しいことを知れて楽しいです. これからもっとC++を楽しむために更に勉強と経験を積んでいきたいと思います.

駄文をここまで読んでくださいありがとうございました.

4
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1