JV-Link 質問箱 |
タイトル | : JVReadに失敗 |
記事No | : 8626 |
投稿日 | : 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に失敗 |
記事No | : 8639 |
投稿日 | : 2016/03/28(Mon) 19:40 |
投稿者 | : JRA-VANソフトサポート |
|
JRA-VANソフトサポートの竹下です。 DataLab.サービスをご利用頂きまして誠にありがとうございます。 回答が遅くなり大変申し訳ございません
現在、ご記載いただいた事象について確認中ではございますが、 原因の特定には至っておりません。
大変お手数ですが以下の情報について 提供いただけますと幸いです。
【確認項目】 @どのデータを取得しようとしているか
A実行ユーザの権限 (例. 管理者、制限ユーザ等)
Bウィルス・セキュリティソフトを停止し、 実行してみて同様の事象が発生するか 以上、よろしくお願い致します。 |
|
タイトル | : Re^2: JVReadに失敗 |
記事No | : 8646 |
投稿日 | : 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に失敗 |
記事No | : 8821 |
投稿日 | : 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に失敗[解決] |
記事No | : 8966 |
投稿日 | : 2016/04/02(Sat) 16:10 |
投稿者 | : タツノオトシゴ |
|
回答ありがとうございます。 outがついているので 取得したサイズが設定されると勘違いしていました。
無事データが取得できました。
VBのコードも参考にいたします。 |
|
|
|
copyright ©2007 JRA SYSTEM SERVICE CO.,LTD. All Rights Reserved.
|
|
|