FlyCapture2 SDKがVS2015で動かなくなった件
生存報告も兼ねて.
もう半年以上放置していたのは,しゅーろんとかいうクソイベとDの新生活が思っていた以上に忙しかったためです.
PointGray社のFlyCapture2 SDKにバグがあったのでその報告と対策.
何が起こったのか
【以前】 Windows 8.1(64bit)環境で,VisualStudio2013で開発していたときには何も問題なくビルドができていた.
【今回】
同じ環境で,VisualStudio2015にアップグレードしたら以前のコードに大量のエラー.
なんかFlyCapture2::Camera
とか重要なやつに赤い波線が…
クラス宣言の外側に無効な型指定子があります.
namespace"FlyCapture2"にメンバー"Camera"がありません.
ぶっちゃけありえな~い!
原因
FlyCapture2::Camera
等の型指定子FLYCAPTURE2_API
の定義は
FlyCapture2Platform.h
内のマクロで決められているが,こいつがVS2015以降に仕事しなくなったのだ.
// 前略 #if defined(WIN32) || defined(WIN64) // Windows 32-bit and 64-bit // 中略 #elif defined(MAC_OSX) // Mac OSX #else // Linux and all others // 後略
元々,VisualStudioの定義済みマクロは_WIN32
や_WIN64
など,_が前に付いているのが普通であり,
今までWIN32
とかWIN64
が使えていたほうが不思議だったらしい.
FlyCapture2 SDKは,この謎のマクロに依存した書き方をしていたため,VS2015以降の仕様変更(?)で動かなくなったのだろう.
参考:
visual studio - C++ MSVC14.0 での WIN32マクロについて - スタック・オーバーフロー
対策
FlyCapture2.h
をインクルードする前にWIN32
をdefineしてしまえばいい.たとえば次の様に.
#ifdef _WIN32 #define WIN32 #endif #ifdef _WIN64 #define WIN64 #endif #include <FlyCapture2.h> #include <FlyCapture2GUI.h>
以上.
この件については公式サポートに問い合わせメールを出しておきました.