ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．ＳＤＫ
開発ガイド（イベント C++）

２０２１年５月２６日
第３．０．１版

修正履歴
日付
2011/3/1
2017/6/6
2021/5/13
2021/5/26

版
1.00
2.00
3.00
3.00.1

項番－－－－種類
新規
修正
修正
追記

内容
初版作成
VisualStudio2015 へのバージョン更新
VisualStudio2019 へのバージョン更新
ビルドエラー発生時についての補足説明を追記

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

目次
はじめに

１．１

ＪＶ－Ｌｉｎｋを使ったプログラミング（イベント取得）

１．１．１ プログラミングのゴール
１．１．２ プロジェクトの作成
１．１．３ ＪＶ－Ｌｉｎｋコントロールの追加
１．１．４ フォームの作成
１．１．５ 設定ボタンのコーディング（JVSetUIProperties）
１．１．６ 初期化／終了処理のコーディング
１．１．７ イベント受信処理のコーディング
１．１．８ ビルド＆実行

3

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

はじめに平素よりＪＲＡ－ＶＡＮをご利用いただき誠にありがとうございます。
弊社では JRA 公式データをより一層活用できる仕組みとして、「ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．」サービスを提供しております。本サービスは、データリンクモジュールのＪＶ－Ｌｉｎｋ（※）を通じて、様々な競馬データの利用が可能になるサービスです。
エンドユーザー様、およびソフトウェア作者の皆様には、この「ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．」サービスの仕組みをご理解いただき、ＪＲＡ－ＶＡＮのデータ提供サービスを活用していただきたいと願っております。
※ＪＶ－Ｌｉｎｋの詳細については JRA-VAN Data Lab.開発ガイドの本編を参照して下さい。

4ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
１．１ ＪＶ－Ｌｉｎｋを使ったプログラミング（イベント取得）
具体的な例を示すことによって、ＪＶ－Ｌｉｎｋを使ってイベントを取得する方法について解説していきたいと思います。ここでは Visual C++ 2019 を例に順を追ってプログラミング方法を説明していきます。ＪＶ－Ｌｉｎｋのインターフェースの詳細については触れませんので、インターフェースの詳細については「ＪＶ－Ｌｉｎｋインターフェース仕様書」を参照して下さい。
１．１．１ プログラミングのゴール
ここではＪＶ－Ｌｉｎｋを使ってイベントを取得して表示する簡単なプログラム（Ｓａｍｐｌｅ2）を作成します。

このプログラムはボタンが１つとテキストボックスが１つのシンプルな画面を持っています。「設定」ボタンを押すとＪＶ－ＬｉｎｋのＪＶＳｅｔＵＩＰｒｏｐｅｒｔｉｅｓインターフェースを使ってＪＶ－Ｌｉｎｋの各種設定を行なうことができます。イベントが発生すると、その内容がテキストボックスに表示されます。

5ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

イベント取得で、ＪＶ－Ｌｉｎｋ、サーバー間で行なわれる処理は以下のようになります。

サンプル
プログラム

ＪＶＩｎｉｔＪＶ－Ｌｉｎｋ

サーバー

JVWatchEvent

イベント発生

イベント発生ＪＶRTＯｐｅｎ
ダウンロードＪＶＲｅａｄ…
…

ＪＶＣｌｏｓｅ

JVWatchEventClose

6ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
１．１．２ プロジェクトの作成
Ｖｉｓｕａｌ Ｓｔｕｄｉｏ2019 を起動し、「コードなしで続行（W）」リンクをクリックする。
メニューバーのファイル(T)→新規作成(N)→プロジェクト(P) …を選択します。

次に「新しいプロジェクト」ダイアログで以下のように設定し「作成」ボタンをクリックします。
項目
プロジェクトの種類
テンプレートプロジェクト名
場所

設定内容「Ｖｉｓｕａｌ C++」-「CLR」を選択「空の CLR プロジェクト」を選択
Sample2
自由に保存場所を設定してください※ 「MFC アプリケーション」－「ダイアログベース」でプロジェクトを作成すると、ＪＶ－Ｌｉｎｋのイベントを取得できませんので、ご注意ください。

7ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

8

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
新しいプロジェクトが作成され下の画面になります。

次に、フォームアプリケーションのフォームを作成します。
メニューバーのプロジェクト(P)→新しい項目の追加（W）…を選択してください。

次に「新しい項目の追加」ダイアログで以下のように設定しＯＫボタンをクリックします。
項目
プロジェクトの種類
テンプレート
名前場所

設定内容「Ｖｉｓｕａｌ C++」-「UI」を選択「Windows フォーム」を選択
sample2Form.h
自由に保存場所を設定してください9ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

次のようなエラーが表示されますが、sample2Form.h タブの「×」をクリックして表示を消してください。

10ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
ソリューションエクスプローラーから sample2Form.h をダブルクリックします。

次のようなフォームデザイン画面が表示されます。

11

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

次にエントリポイントの定義を行います。
フォームと同様に、「新しい項目の追加」ダイアログで以下のように設定しＯＫボタンをクリックします。
項目
プロジェクトの種類
テンプレート
名前場所

設定内容「Ｖｉｓｕａｌ C++」を選択「C++ファイル(.cpp)」を選択
sample2.cpp
自由に保存場所を設定してください12ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
新しいソースファイルが作成され下のような画面になります。

表示されたエディタに対して、以下のコードを記載します。
#include "sample2Form.h" // Form名.husing namespace System;
using namespace System::Windows::Forms;[STAThreadAttribute]int main(array<String^>^ args) {Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);// gcnewプロジェクト名:: Form名()
Application::Run(gcnew Sample2::sample2Form());
return 0;}

13

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
次に、メニューバーのプロジェクト(P)→Sample2 のプロパティ（E）…を選択してください。

表示されたプロパティページから、以下の値を設定します。
項目
構成プロパティ-リンカー-システム-サブシステム
構成プロパティ-リンカー-詳細設定-エントリポイント

14

設定内容
Windows (/SUBSYSTEM:WINDOWS)
main

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

15

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．３ ＪＶＬｉｎｋコントロールの追加
フォームデザインを作成したら、この開発環境(Visual Studio 2019)でＪＶ－Ｌｉｎｋを使用できるように設定を行なう必要があります。
メニューバーのツール(T)→ツールボックス アイテムの選択(X)…を選択します。

ツールボックス アイテムの選択ダイアログの COM コンポーネントタブの中からＪＶＬｉｎｋ Ｃｌａｓｓにチェックを付け、ＯＫボタンをクリックします。

16

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

これによりツールボックスにＪＶＬｉｎｋコントロールが追加されます。

17

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．４ フォームの作成
下図のようにフォームにボタンとテキストボックス、およびＪＶＬｉｎｋコントロールを貼り付け各プロパティを設定します。

コントロールbutton1m_strOutm_jvlink1

プロパティー
Text
Text
ScrollBars
Multiline
Wordwrap
Font
なし

18

選択／設定
“設定“
空白BothTrueFalse
固定幅フォントの方が見やすいでしょうなし

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

１．１．５ 設定ボタンのコーディング（JVSetUIProperties）
設定ボタンのコーディングに関しては従来と変わりませんので、省略します。
１．１．６ 初期化／終了処理のコーディング
初期化処理として以下の処理を、フォーム読込イベントで行います。
処理

内容①ＪＶＬｉｎｋの初期化（ＪＶＩｎｉｔ）

ＪＶＬｉｎｋの初期化を行います。JVWatchEventを呼び出す前に最低１回呼び出す必要があります。
確定・変更情報が発生した際、イベントを通知するスレッドを開始します。

②イベント通知開始（JVWatchEvent）

終了処理として以下の処理を、フォームクローズイベントで行います。
処理内容①イベント通知終了（JVWatchEventClose）

イベント通知スレッドを終了します。

デザイン画面を表示し、Form1 の「プロパティ」から「イベント」ボタンを押し、「Load」の関数名入力部分をダブルクリックすると「Form1.h」にイベント関数が作成されますので、それに対して初期化処理のコードを記述していきます。
同様に「FormClosed」の関数名入力部分をダブルクリックしてイベント関数を作成し、終了処理のコードを記述していきます。

19

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

Form1 の Load／Closed イベント関数に以下のコードを記述します。
サンプルソース１//-----------------------------------------------------------------------------//
フォーム読込//-----------------------------------------------------------------------------private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {//**********************//JVInit処理//**********************
int ReturnCode = m_jvlink1->JVInit("UNKNOWN");①//エラー判定
if(ReturnCode != 0){//エラー
m_strOut->AppendText("JVInitエラー:" + ReturnCode + Environment::NewLine);
}
else{
//正常
// イベント監視オブジェクト初期化②
ReturnCode = m_jvlink1->JVWatchEvent();//エラー判定
if (ReturnCode != 0){//エラー
m_strOut->AppendText("JVWatchEventエラー:" + ReturnCode +Environment::NewLine);}}}//-----------------------------------------------------------------------------//
フォーム閉じる//-----------------------------------------------------------------------------private: System::Void Form1_FormClosed(System::Object^ sender,System::Windows::Forms::FormClosedEventArgs^ e) {// イベント監視処理終了③
int ReturnCode = m_jvlink1->JVWatchEventClose();}
サンプルソース１解説①ＪＶＩｎｉｔにはアプリケーションＩＤを渡します。このアプリケーションＩＤはサーバーとの通信の際にＨＴＴＰヘッダーのＵｓｅｒ－Ａｇｅｎｔとして使用されます。ソフトの名前とバージョン番号を組み合わせてユニークなＩＤを指定して下さい。開発途中でアプリケーションＩＤを決められない場合には“ＵＮＫＮＯＷＮ”を指定して下さい。

②イベント通知開始をおこなうことで、それ以降に払戻確定、騎手変更、天候馬場状態変更、コース変更、出走取消・競走除外、発走時刻変更、馬体重が発表された際、イベントを受理することが可能になります。

20ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書③イベント受信処理を終了する場合に JVWatchEventClose を呼び出します。
今回のサンプルではフォームを閉じる時（プログラムが終了する時）に呼び出しています。

21

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
１．１．７ イベント受信処理のコーディング
各イベントに対してのイベント関数を作成することにより、対象イベントが発生した際の処理をコーディングすることが可能となります。
ここではサンプルとして、払戻確定イベントが発生した際のコードを載せますが、それ以外のイベントも作り方は同じです。
デザイン画面を表示し、m_jvlink1 の「プロパティ」から「イベント」ボタンを押し、「JVEvtPay」の関数名入力部分をダブルクリックすると「Form1.h」にイベント関数が作成されますので、それに対してコードを記述していきます。

m_jvlink1 の JVEvtPay イベント関数に以下のコードを記述しさらに読み込み＆表示処理の関数を作成します。
このサンプルでは、イベントが発生した元となるデータを取得し画面に表示しています。
処理

内容①リアルタイム系データの取得要求（JVRTOpen）②JV-Data の読み込み（JVRead）③JV-Data 読み込み処理の終了（JVClose）

リアルタイム系データの取得要求をします。
JV-Data の読み込みをします。
JV-Data 読み込み処理の終了をします。

22

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
サンプルソース２//-----------------------------------------------------------------------------//
払戻速報//-----------------------------------------------------------------------------private: System::Void m_jvlink1_JVEvtPay(System::Object^ sender,AxJVDTLabLib::_IJVLinkEvents_JVEvtPayEvent^ e) {MessageBox::Show("払戻速報：" + e->bstr, Text);①
int ReturnCode = m_jvlink1->JVRTOpen("0B12", e->bstr);
if (ReturnCode != 0){
m_strOut->AppendText("JVRTOpenエラー:" + ReturnCode + Environment::NewLine);}
else{
m_strOut->AppendText("【速報レース情報(払戻速報) dataspec = " + "0B12" + " key = "+ e->bstr + "】" + Environment::NewLine);// 読み込み＆表示処理
ReadData();}}//-----------------------------------------------------------------------------//
読み込み＆表示処理//-----------------------------------------------------------------------------private: void ReadData(void){
int buffSize = 150000;
String^ buff;
String^ fName;
int ReturnCode;while((ReturnCode = m_jvlink1->JVRead(buff, buffSize, fName)) != 0){②//正常
if(ReturnCode > 0){m_strOut->AppendText(buff);}
else{
//エラー
if(ReturnCode != -1){
m_strOut->AppendText("JVReadエラー:" + ReturnCode + Environment::NewLine);
break;}}}// JVClose
ReturnCode = m_jvlink1->JVClose();③}23

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
サンプルソース２解説①イベント発生元となったリアルタイム系データの取得要求をします。
第１パラメータはイベント毎に決まっている「データ種別ＩＤ」です。
詳細については「ＪＶ－Ｌｉｎｋインターフェース仕様書」を参照して下さい。

②JVRTOpen で準備した JV-Data を現在のファイルポインタから１行分読み出します。
正の数が返された場合は、正常にレコードを読み込んでいるので（文末に改行コード付）データ格納バッファを画面にそのまま表示します。
－１が返された場合は、読込対象ファイルの変更を意味しているので、何もせず次のデータを読み込みにいきます。
全てのファイルを読み終わると０が返りますので、読み込みループを終了します。
エラーが発生した場合にはエラーの理由コードとして負の数が返されます。
JVRead ではなく JVGets を使って読み出すことも可能です。

③ＪＶ－Ｄａｔａ読み込み処理を終了します。

１．１．８ ビルド＆実行
メニューバーのビルド(B)→ソリューションのビルド(B)を選択します。

以上で Sample2 の開発は終了です。ビルドによって作成された.exe ファイルをダブルクリックするかデバッグコマンドにより実行が可能です。

24

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
実際にイベントを発生させて、その動作を検証するには DataLab 検証ツールを使います。
（DataLab 検証ツールはＪＲＡ－VAN のホームページの「プログラミングパーツ・開発支援ツール提供コーナー」にありますので、ダウンロードしてください。）
DataLab 検証ツールのインストール及び詳しい使用方法に関しては、DataLab 検証ツール説明書を参照してください。
今回サンプルソースで作成した、払戻確定イベントを発生させるには以下の様に操作します。
① DataLab 検証ツールを起動します。

25

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書② 「速報系」ボタンをクリックします。

③ 年月日場レースを入力し、「イベントを通知する」をチェックし、「擬似通知（払戻）」をクリックします。

④ 払戻結果が Sample2 に表示されます。
DataLab 検証ツールと同じデータが表示されていることを確認してください。

26

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

補足説明 1：
下記のビルドエラーが発生した場合、次の手順を実施してください。

Visual Studio インストーラーを起動し、ダウンロードを完了させてください。

27

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

28

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書「変更」ボタンをクリックします。

29

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書
変更画面にて「個別のコンポーネント」タブを選択し、右側の「C++によるデスクトップ開発」のツリーを展開してください。

「最新の v142 ビルドツール用 C++ MFC(x86 および x64)」の項目にチェックをし、右下の「変更」ボタンをクリックしてインストールを実行してください。

30

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

31

ＪＲＡ－ＶＡＮ Ｄａｔａ Ｌａｂ．仕様書

インストール完了後、再度プロジェクトを起動しビルドを再実施し、問題なくビルドが完了することを確認してください。

32