この何年かずっと、JAISDKというSDKを使っています。
http://www.jai.com/jp/camerasolutions/download/software
先日作ったあるソフトが特定のPC上で動かない!!というクレームで
調査したら、どうやらSDKのバージョンに起因するもよう。
ソフト自体は、ごく簡単なもので、PCに接続したGEカメラの特定Nodeの
値を読み取ってくるだけです、先頭部こんな感じ。
//カメラ検索 myFactory.UpdateCameraList(Jai_FactoryDotNET.CFactory.EDriverType.FilterDriver); if (myFactory.CameraList.Count > 0) { myCamera = myFactory.CameraList[0]; if (myCamera.Open() != Jai_FactoryWrapper.EFactoryError.Success) { MessageBox.Show("カメラをOpen出来ません", "カメラOpenエラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else {
動作概要
UpdateCameraList実行で、接続された(ネットワーク上の)カメラを検索し、
見つかった台数がCameraList.Countに入ります、0より大きければカメラ検出成功。
リスト先頭のカメラをOpenして、以降で所望Nodeの設定値を読んでいきます。
不具合現象
このソフトは、JAISDKの最新版(2.1.6)の環境で作りました。
そこだとOKですが、旧バージョンのSDK (1.4.1)の環境だと
J_GenTL_XXXXが見つかりません、という、見覚えない関数名でエラー。
原因
両バージョンのSDKのマニュアルを見比べていくと、1.4.1の方には
J_GenTL系の関数が有りませんでした。(2.6.1には存在する)
これらを使った覚えは無いので、UpdateCameraList実行時に
2.6.1では内部でJ_GenTL系の関数が呼ばれているのだろう、
と推測されます。 (1.4.1では別のが使われていた?)
解決策
SDKのバージョンを1.4.1に戻して、Buildし直したらOK
(結果的に)SDKのバージョンを最新版に上げていたのが失敗!
今回、何か最新版の機能を使っているのなら納得するのですが、
上記の処理自体は1.4.1当時と全く同じ。(ソースファイルも共通)
それが旧バージョンで動かなくなるとは、ちょっと想定外でした。
教訓:無闇に上げるなSDKバージョン。