EXCEEDの同人ソフト開発日記という名の備忘録

趣味のゲームソフト開発人。プロなのかアマなのかは不明(不定)らしい。

任天堂のソフトはいつも予定通りに出てこないって言われるけど、
ソフト作りっていうのは、そういうもの。
ゲームソフトは、期限までにやれと言われて、徹夜したり死に物狂いでやったからといって、
期待通りのものにはならない。そういうふうにすると、
結局、チームは妥協しなければならなくなる。
妥協させられて、できたものは、粗くなってしまう。
ユーザーは目が肥えていますから、受け付けてもらえない

山内 薄

DirectX 9.0 SDK(2003 Summer) を Visual Studio 2005 で使う

WindowsXP の再フォーマットをすることになったので、これを期に開発環境を VC++ 6.0 から Visual Studio 2005 に乗り換えることにしたのだが、予想通り、これがすんなりとは行かなかった。

諸侯の事情で、どうしても VS 2005 登場以前の古い DirectX SDK を使う必要があったため、それをそのまま使ってコンパイルした所、おかしなところ(winnt.h の 222行目の例のエラー)でコンパイルエラーが出てしまい、止むを得ず調査していた。

同様なトラブルに悩んでいる人が海外にも居たらしく、参考にはなった。


http://www.codecomments.com/message716133.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=63785&SiteID=1


しかし、結局の所、それで完全に問題が解決したわけではなかった。
どういうワケか、未解決シンボルが1つ残ってしまい、どうしてもコンパイルが通らない・・・


error LNK2019: 未解決の外部シンボル "public: __thiscall CBaseVideoRenderer::CBaseVideoRenderer(struct _GUID const &,char *,struct IUnknown *,long *)" (??0CBaseVideoRenderer@@QAE@ABU_GUID@@PADPAUIUnknown@@PAJ@Z) が関数 "foofoofoo:foofoofoo" (??0foofoofoo@@QAE@PAUIUnknown@@PAJ@Z) で参照されました。

また、Visual Studio .NET 登場以前の古い DirectX SDK を使いたい(使わざるを得ない)場合、ソースコードだけで提供されているSDKライブラリ(要するに DirectShow 関係の自分でコンパイルしないといけないやつ)は、厳格なCのコード規約に則っている(と思われる)Visual Studio 2005 では、そのままではコンパイルが通らないという罠がある。

たとえば、ANSI規格とMicrosoft独自規格では、変数スコープが異なってしまっているため、Visual C++ 6.0以下時代の SDKライブラリのソースコードを、Visual Studio 2005 でコンパイルしようとすると、エラーで弾かれたりする。例えば、以下の例



ANSI

for(int i=0;i<100;i++)
{
// i はこの中だけ有効
}

Microsoft Visual C++

for(int i=0;i<100;i++)
{
......
}
// i はまだ生きている



まあ、あれこれやっているうちに、本当に嫌になってきたのと、現状で Visual Studio 2005 の VC++ 8.0 を使うメリットが個人的には無いので、結局今回は VC++ 8.0 の使用を諦めて、VC++ 6.0 を使い続けることにした・・・(爆

VS 2005 は時期プロジェクトから乗り換えることにしよう・・・・(果たして何年先になるか・・・)