JRA公式競馬データ配信サービス JRA-VAN Data Lab.

JRA-VAN DataLab.

競馬ソフト開発コーナー

JV-Link 質問箱

一括表示 リストに戻る
タイトルJVReadに失敗
記事No8626
投稿日: 2016/03/20(Sun) 21:34
投稿者タツノオトシゴ
windows10(64bit) でVS Community 2015のC#を使って作成しようとしているので
すが

JVOpenした後に
JVReadを試したところ、以下のエラーが発生しました。
(JVGetsを使用しても同様です)

-----------------
System.Runtime.InteropServices.SEHException はハンドルされませんでした

ErrorCode=-2147467259
HResult=-2147467259
Message=外部コンポーネントが例外をスローしました。
Source=Interop.JVDTLabLib
StackTrace:
場所 JVDTLabLib.IJVLink.JVRead(String& buff, Int32& size
, String& filename)
場所 AxJVDTLabLib.AxJVLink.JVRead(String& buff, Int32& s
ize, String& filename)
-----------------

何か必要な手順が抜けているのでしょうか?

タイトルRe: JVReadに失敗
記事No8639
投稿日: 2016/03/28(Mon) 19:40
投稿者JRA-VANソフトサポート

JRA-VANソフトサポートの竹下です。
DataLab.サービスをご利用頂きまして誠にありがとうございます。
回答が遅くなり大変申し訳ございません

現在、ご記載いただいた事象について確認中ではございますが、
原因の特定には至っておりません。

大変お手数ですが以下の情報について
提供いただけますと幸いです。

【確認項目】
@どのデータを取得しようとしているか

A実行ユーザの権限
(例. 管理者、制限ユーザ等)

Bウィルス・セキュリティソフトを停止し、
実行してみて同様の事象が発生するか
 
以上、よろしくお願い致します。

タイトルRe^2: JVReadに失敗
記事No8646
投稿日: 2016/03/29(Tue) 20:10
投稿者タツノオトシゴ
>@どのデータを取得しようとしているか
下記のコードで取得しています
ファイルのダウンロードまでは動作しているのを確認しました

>A実行ユーザの権限
>(例. 管理者、制限ユーザ等)
管理者権限を持つユーザーで実行しています
念のため、管理者として実行を行っても発生しました

>Bウィルス・セキュリティソフトを停止し、
>実行してみて同様の事象が発生するか
セキュリティソフトを停止しても発生しました
使用しているセキュリティソフトはAvastです

/* 以下コード */
/*------------------------------*/
//サンプル取得
int ReadCount = 0;//データ件数
int DownloadCount = 0;//ダウンロード数
string LastFileTimeStamp = "";//ダウンロードしたファイルのタ
イムスタンプ
int ReturnCode;//リターンコード
string DataSpec = "RACE";
string FromDate = "20150322000000";
int DataOption = 1;

ReturnCode = axJVLink1.JVOpen(DataSpec, FromDate, DataOption, ref ReadC
ount, ref DownloadCount, out LastFileTimeStamp);

if (ReturnCode != 0) return;

//ダウンロード待ち
while (axJVLink1.JVStatus() < DownloadCount)
{
System.Threading.Thread.Sleep(1000);//1秒待つ
}

string buf="";
string getfname = "";
Int32 getsize=0;

if (ReadCount > 0)
{
ReturnCode = axJVLink1.JVRead(out buf, out getsize, out getfname
);//ここでエラーが発生
}
axJVLink1.JVClose();

タイトルRe^3: JVReadに失敗
記事No8821
投稿日: 2016/04/01(Fri) 12:01
投稿者JRA-VANソフトサポート

JRA-VANソフトサポートの竹下です。
DataLab.サービスをご利用頂きまして誠にありがとうございます。

確認の実施およびコードのご提供誠にありがとうございます。
記載いただいたコードから原因が判明いたしましたので、
以下に回答いたします。

/* 提供いただいたコードの抜粋 */
/*------------------------------*/

string buf="";
string getfname = "";
Int32 getsize=0;

if (ReadCount > 0)
{
ReturnCode = axJVLink1.JVRead(out buf, out getsize, out getfname
);//ここでエラーが発生
}
axJVLink1.JVClose();
/*------------------------------*/

この箇所の
「Int32 getsize=0;」
が原因で問題のSEHExceptionが発生しております。

getsizeはJVReadに渡す第2パラメタになります。
パラメタの説明としては、
JV-Linkインターフェース(Win版)仕様書(Ver.4.4.1)にも
記載ありますが、呼出側で用意したデータ格納バッファに
コピーするデータの長さを指定します。

そのため、ここで0を指定してしまうと
JVRead側でそのバッファを確保できないので
上記例外が発生したと考えられます。

対応としましては、
getsizeに0より大きな値を設定すれば良いのですが
レコード長に対し十分なサイズがないと
文字列が切り捨てられる仕様ですので、
レコードデータが収容可能なサイズを設定いただけば
よろしいかと存じ上げます。


言語は異なります(VB 2010)が、処理の流れは変わりませんので
JV-Dataの読み出しについては以下のサンプルコードも
ご参考いただければと思います。
http://jra-van.jp/dlb/sdv/workshop/20121109/Lesson-3.lzh


以上、よろしくお願いいたします。

タイトルRe^4: JVReadに失敗[解決]
記事No8966
投稿日: 2016/04/02(Sat) 16:10
投稿者タツノオトシゴ
回答ありがとうございます。
outがついているので 取得したサイズが設定されると勘違いしていました。

無事データが取得できました。

VBのコードも参考にいたします。

ウィンドウを閉じる