参考
競馬ソフト開発体験教室(https://jra-van.jp/dlb/sdv/trial.html)
Lesson.2 JV-Dataをダウンロードする
注:上記の参考サイトを元にVBからC#へ移植する進めていきます。
前回記事
JV-LinkをC#で使ってみる(WinForms版) ~1.サービスキーを入力する仕組みを用意する~
今回のソースコード
source – JV-LinkをC#で使ってみる(WinForms版) ~2.JV-Dataをダウンロードする~
開発環境
- Windows7 64ビット版
- Visual Studio Community 2017
- JV-Link Ver.4.5.1
フォームの編集
データ取得ボタンの作成
フォームデザイナーで[ツールボックス]から「Button」を貼り付けます。
「Button」の設定を以下のように変更します。
プロパティ | 値 |
---|---|
(Name) | btnGetJVData |
Text | データ取得 |
コードの編集
JVInit()の使用方法
仕様書によると、
※アプリケーションの初期化時に呼び出しを行ってください。JVOpenあるいはJVRTOpenの都度呼び出す必要はありません。
との事なので、JVInit()関数はアプリケーションの起動時に一回呼び出せば問題ありません。ここではサンプル同様に、フォームのLoadイベントで呼び出します。Loadイベントの作成には、まず「プロパティウィンドウ」のイベントボタンを押下します。イベント一覧の中からLoadをダブルクリックすると、Loadイベントの関数が作成されます。
エディタにfrmMain_Load()関数が作成されますので、参考サイトのソースコードを移植します。
private void frmMain_Load(object sender, EventArgs e)
{
string sid;
int nReturnCode;
// 引数設定
sid = "Test";
// JVLink 初期化
nReturnCode = AxJVLink1.JVInit(sid);
// エラー判定
if (nReturnCode != 0)
{
MessageBox.Show("JVInit エラー コード:" + nReturnCode + ":", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
Cursor = System.Windows.Forms.Cursors.Default;
}
}
今回はVBサンプルに従ってSID(ソフトウェアID)には「Test」と言うIDを指定しています。 (一般的には「UNKNOWN」を使用するようです。)
JVOpen()/JVClose()関数の使用方法
参考サイトのLesson.2のVBソースコードをC#へ移植します。なるべくそのまま移植しますが、以下の変更が必要になります。
- [lOption][lReadCount][lDownloadCount]をlongではなくintで宣言する必要がある。
注:32ビット符号付整数で受け渡す必要があります。
- [lReadCount][lDownloadCount]に初期値を与える必要がある。
注:引数を参照渡しする時、C#では未割当の変数はコンパイルエラーとなります。
データ取得ボタンをダブルクリックすると、データ取得ボタンのClickイベントの関数が作成されます。コードエディタ側にbtnGetJVData_Click()関数が作成されますので、ソースコードを移植します。
private void btnGetJVData_Click(object sender, EventArgs e)
{
int nReturnCode;
try
{
string strDataSpec; // JVOpen: ファイル識別子
string strFromTime; // JVOpen: データ提供日付
int nOption; // JVOpen: オプション
int nReadCount; // JVOpen: 戻り値
int nDownloadCount; // JVOpen: 総ダウンロードファイル数
string strLastFileTimestamp; // JVOpen: 最新ファイルのタイムスタンプ
// 引数設定
strDataSpec = "RACE";
strFromTime = "20050301000000";
nOption = 2;
nReadCount = 0;
nDownloadCount = 0;
// JVLink ダウンロード処理
nReturnCode = AxJVLink1.JVOpen(strDataSpec, strFromTime, nOption, ref nReadCount, ref nDownloadCount, out strLastFileTimestamp);
// エラー判定
if (nReturnCode != 0)
{
MessageBox.Show("JVOpen エラー:" + nReturnCode);
}
else
{
MessageBox.Show(
"戻り値 : " + nReturnCode + "\n" +
"読み込みファイル数 : " + nReadCount + "\n" +
"ダウンロードファイル数 : " + nDownloadCount + "\n" +
"タイムスタンプ : " + strLastFileTimestamp);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return;
}
// JVLink 終了処理
nReturnCode = AxJVLink1.JVClose();
if (nReturnCode != 0)
{
MessageBox.Show("JVClose エラー:" + nReturnCode);
}
}
コードの編集が完了したらプログラムを実行し、データ取得ボタンを選択して動作を確認します。
ちなみに、関数名がJVOpen()となっていますが実際には JV-Data のダウンロードまで行われます。ダウンロードするための専用の関数は存在しません。
以上で、 JV-Data のダウンロードが完了となります。ただし、現段階ではダウンロードしただけなので、どのようなデータをダウンロードしたのかはわかりません。