お世話になっております。
JV-Link の速報系データ取得について、
複数環境で同一の現象が発生しており、
原因確認をお願いしたく投稿いたします。
■ 発生している事象
C# (.NET Framework) から JV-Link を呼び出しており、
最小構成のコンソールアプリで以下の挙動になります。
JVInit(“UNKNOWN”) → 戻り値 0
JVRTOpen(“0B31”, “2025113005050808”) → 戻り値 0、JVStatus=0
続けて最初の JVRead(out buff, out size, out fileName) 呼び出しで例外発生
例外の内容は次の通りです。
System.Runtime.InteropServices.SEHException「外部コンポーネントが例外をスローしました。」HRESULT: 0x80010105 (RPC_E_SERVERFAULT)
※ 例外は「最初の1回目の JVRead」で必ず発生します。
※ 2台の Windows PC(どちらも x86 / .NET Framework / JV-Link 正常インストール済み)で
同じ最小コードを実行しても同じ現象になります。
■ 使用している JVRead のシグネチャ
C# 側で参照している JVRead のシグネチャは以下の通りです。
int JVRead(out string buff, out int size, out string fileName);
buff / size / fileName はすべて out パラメータとなっており、
呼び出し側では事前にバッファを確保せず、
そのまま JVRead(out buff, out size, out fileName) を1回だけ呼び出しています。
■ 前提条件
JVInit、JVRTOpen の戻り値はいずれも 0(正常)
dataspec=“0B31”、key=“2025113005050808” の組み合わせは、仕様上有効なレースID指定という認識です
C# 側では COM 参照「JRA-VAN Data Lab. タイプライブラリ (JVDTLabLib)」を使用
プロジェクト設定は x86 / [STAThread]
他の dataspec(蓄積系)では JVOpen → JVRead が正常に動作しており、同様の SEHException は発生していません
■ お伺いしたい点
上記条件において、
JVRTOpen 正常終了後の「最初の」 JVRead のタイミングで SEHException (0x80010105, RPC_E_SERVERFAULT) が発生する要因として、
JV-Link 側で想定されるケースはありますでしょうか。
対象データが存在しない場合や、内部ファイル未生成などの状態で、
JVRead が SEHException / RPC_E_SERVERFAULT になることは仕様上あり得ますか。
JVRead が .NET 側で「out string buff, out int size, out string fileName」というシグネチャになっている場合、
C# 側で事前に buff にダミーの文字列(例:new string(‘\0’, 110000))や size を設定しておく必要はありますでしょうか。
それとも、現在のように out パラメータのまま呼び出す形で問題ないでしょうか。
お手数をおかけしますが、ご確認のほどよろしくお願いいたします。