参考
前回記事
JV-LinkをC#で使ってみる(Console版) ~2.JV-Dataをダウンロードする~
WinForms版
JV-LinkをC#で使ってみる(WinForms版) ~3.JV-Dataの内容を読み出す~
今回のソースコード
source – JV-LinkをC#で使ってみる(Console版) ~3.JV-Dataの内容を読み出す~
開発環境
- Windows7 64ビット版
- Visual Studio Community 2017
- JV-Link Ver.4.5.1
メインプログラムの作成
JV-Data構造体の使用方法
WinForms版を合わせてご参照ください。
JV-Data構造体へのデータ読み込み
まず、WinForms版と同様に JV-Data 構造体を使用しますので、先頭に「JVData_Struct」のusingディレクティブを追加します。
using static JVData_Struct; // JVData_Struct クラス使用のために必要
次に、ここが一番重要な部分なのですが、Mainメソッドに[STAThread]属性を付けます。
[STAThread]
static void Main(string[] args)
JV-Link はマルチスレッドプログラムでは動作が保証されていないので、この記述がないとJVRead()関数の部分でプログラムが強制終了します。
詳しくは以下の掲示板を参照。
次がメインとなる処理の部分です。
WinForms版を合わせてご参照ください。
まず最初にJVRead()を使用してstrBuffにデータを読み込みます。その後、JVRead()の戻り値をもとに分岐させます。戻り値が0より大きい場合(case int ret when ret > 0:
の部分)が正常系となっています。読み込みが正常だった場合で、尚且つstrBuffの頭2文字が"RA"だった場合に、データをJV_RA_RACE構造体へ取り込み、構造体をもとに画面表示します。
//=====================================================================================
var nBuffSize = 110000; // JVRead: データ格納バッファサイズ
var nNameSize = 256; // JVRead: ファイル名サイズ
var strBuff = new string('\0', nBuffSize); // JVRead: データ格納バッファ
var strFileName = new string('\0', nNameSize); // JVRead: 読み込み中ファイル名
var raceInfo = new JV_RA_RACE(); // レース詳細情報構造体
bool flg_exit = false;
do
{
switch (jvLink.JVRead(out strBuff, out nBuffSize, out strFileName))
{
case 0: // 全ファイル読み込み終了
Console.WriteLine("全ファイル読み込み終了\n");
flg_exit = true;
break;
case -1: // ファイル切り替わり
Console.WriteLine("ファイル切り替わり\n");
break;
case -3: // ダウンロード中
Console.WriteLine("ダウンロード中\n");
break;
case -201: // JVInit されてない
Console.WriteLine("JVInit が行われていません。");
flg_exit = true;
break;
case -203: // JVOpen されてない
Console.WriteLine("JVOpen が行われていません。");
flg_exit = true;
break;
case -503: // ファイルがない
Console.WriteLine(strFileName + "が存在しません。");
flg_exit = true;
break;
case int ret when ret > 0:
switch (strBuff.Substring(0, 2))
{
case "RA":
// レース詳細情報を構造体へ格納
raceInfo.SetDataB(ref strBuff);
// レース詳細を画面表示
Console.WriteLine(
"年:" + raceInfo.id.Year +
" 月日:" + raceInfo.id.MonthDay +
" 場:" + raceInfo.id.JyoCD +
" 回次:" + raceInfo.id.Kaiji +
" 日次:" + raceInfo.id.Nichiji +
" R:" + raceInfo.id.RaceNum +
" レース名:" + raceInfo.RaceInfo.Ryakusyo10 +
"\n"
);
break;
default:
// 読み飛ばし
Console.WriteLine("読み飛ばし\n");
jvLink.JVSkip();
break;
}
break;
}
}
while (!flg_exit);
動作確認
コードの編集が完了したらプログラムを実行して動作を確認します。
以上で、 JV-Data のデータ読み込みが完了となります。