Edited at

[C++] DirectShowのフィルタを自作しようとして軽くハマった話

More than 1 year has passed since last update.


0. TL;DR

以下のエラーが発生.

- LNK2019 未解決の外部シンボル __imp__vsnwprintfが~

- LNK2001 外部シンボル "__imp__vswprintf は未解決です"

VisualStudio2015以降だと, printf()やscanf()関係がガラッと変わっているらしく, リンカの入力オプションにlegacy_stdio_definitions.libを追加しなければならなかったらしい.

【参考サイト】

解決に導いてくれた記事


1. はじめに

前回, DirectShowを使おうとして軽くハマったわけですが, 無事解決し清々しい気持ちでプログラムを書き始めました.

開発を進めるにつれ, どうやら自作のフィルタを作成しなければならないことを知り, 早速取り掛かることに.

そこで事件が起こるわけです...


2. strmbased.libなんてないジャマイカ

最初に言っておくとジャマイカは何も関係ありません.

早速 MSDN に行ってフィルタの自作方法を検索してみると, (SDK)\Samples\Multimedia\C++\BaseClasses に「strmbased.lib(or strmbasd.lib) があるからそれ使ってね! あ, あと streams.h もちゃんと include するんだぞ!」って書いてあったので, まずそのディレクトリを探してみると見事になかったため, なんのSDKをインストールする必要があるのか調べることに.

このサイトによると, [Windows SDK for Windows Server 2008] か [Windows SDK for Windows Vista] をインストールすればいいらしいので落としに行ってみると...

 - We're sorry, this download is no longer available.

え, もう落とせないやん... MSDNのサブスクリプションないとアカンのか(絶望).

「もうダメだぁ~, おしまいだぁ~」などと言っているヒマはないため, 過去プロジェクトをひたすら検索しまくることに.

そうしたら, 奇跡的に発見することに成功!! やったね!!

でも, これ普通に趣味としてやってる人は開発できないよね? Microsoftさん, どうにかならんの?

まあ, 古の技術じゃなくてMedia Foundationとか使えって話なのかもしれませんが...


3. 恐怖のリンカエラー

順調に開発を進め, いざビルドを実行してみるとリンカエラーが...前回の悪夢が蘇る.

「まーた君かぁ. 壊れるなぁ.」 などと考えているヒマもなくGoogle先生に尋ねてみることに.

しかし, あまりの情報量の多さに四苦八苦. 手当たり次第試してみることに! これが地獄の始まりとは知らずに...

数撃ちゃ当たるだろ戦法は必ず1つの方法で解決できるときには有効ですが, 今回の場合, 色々な原因が考えられる状況ではあまりに無力...

数撃ってるうちに気付きました. これ, 解決方法の組み合わせで解決する場合を考えると無理だよね?と.

そこで今一度, Google先生に聞いてみることに.

サーチすること1時間くらい. ようやく解決に導いてくれた記事に辿り着きました!

サイトの導きの通りに実行することによって, 無事リンカエラーともおさらばできましたとさ!!


4. おわりに

実はこの話, これでめでたしめでたしでは終わりません.

なんと今回作成した自作フィルターは...

見事お蔵入りとなりました!!!!泣

結局うまく動かなかったので, 別の手法で実現することとなりましたとさ.

トホホ...