プログラミング質問広場 |
本掲示板は、プログラミングに関する情報を作者様同士で共有・議論していただく場として用意いたしました。 JV-Link、JV-Dataに直接関連しない(一般論としてのプログラミング方法やAPI・メソッドの利用法などの)スレッドはこちらに立ててください。
|
|
タイトル | : C#からのMVReadの利用 |
記事No | : 4888 |
投稿日 | : 2022/06/01(Wed) 09:14 |
投稿者 | : KMY |
|
お世話になります。
C#(.NET6)で競馬アプリを開発しています。 調教動画を取得したく、MVOpenとMVReadを試していますが、なかなかうまくい きません。
JVReadと異なり参照渡しする変数の型がstringになっているため、同じ方法で 呼び出すことはできません。 unsafeなど試しましたが、いずれも同じエラーが返ってきます。 どのようにすればよいのか、ご教授いただけますでしょうか。よろしくお願い します。
【ソース】 ------------------------------------------------- var openResult = this.link.MVOpen(((short)type).ToString(), key); if (openResult != 0) { throw new JVLinkException<JVLinkMovieResult>((JVLinkMovieResult )result); }
var size = 19; var list = new List<string>();
int result; var buff = new string(Enumerable.Repeat(' ', size + 1).ToArra y());
while ((result = this.link.MVRead(out buff, out size)) != 0) { if (result > 0) { list.Add(buff.ToString()); } else { throw new JVLinkException<JVLinkMovieResult>((JVLinkMovieResu lt)result); } }
// 別ファイル内 public int MVOpen(string type, string key) => this.link.JVMVOpen(typ e, key); public int MVRead(out string buff, out int size) => this.link.JVMVRe ad(out buff, out size); -------------------------------------------------
【結果】 サーバーによって例外が返されました。 (0x80010105 (RPC_E_SERVERFAULT)) |
|
タイトル | : Re: C#からのMVReadの利用 |
記事No | : 4889 |
投稿日 | : 2022/06/01(Wed) 21:31 |
投稿者 | : Tachyon |
|
提示されたソースで試しに検証してみましたが、問題なく動作します。 エラーとなった具体的な箇所はどこなのでしょうか? 別ファイル内?
ちなみに、フォームにボタンを配置し以下のソースで検証しました。
【ソース】 ------------------------------------------------- private JVLinkClass cJVLink = new JVLinkClass();
private void button1_Click(object sender, EventArgs e) { try { int initResult = cJVLink.JVInit("SA000000/SD000004"); if (initResult != 0) { MessageBox.Show("JVInit (" + initResult.ToString( ) + ")", "Error", MessageBoxButtons.OK, MessageBoxIc on.Error); return; }
// テストデータ:2022/05/29開催の全出走馬を対象 var type = 11; var key = "20220529";
var openResult = MVOpen(((short)type).ToString(), key); if (openResult != 0) { //throw new JVLinkException<JVLinkMovieResult>((JVLin kMovieResult)result); MessageBox.Show("JVMVOpen (" + openResult.ToStrin g() + ")", "Error", MessageBoxButtons.OK, MessageBox Icon.Error); return; }
var size = 19; var list = new List<string>();
int result; var buff = new string(Enumerable.Repeat(' ', size + 1 ).ToArray());
while ((result = MVRead(out buff, out size)) != 0) { if (result > 0) { list.Add(buff.ToString()); } else { //throw new JVLinkException<JVLinkMovieResult>((J VLinkMovieResult)result); MessageBox.Show("JVMVRead (" + result.ToStrin g() + ")", "Error", MessageBoxButtons.OK, MessageBox Icon.Error); break; } } if (result == 0) { MessageBox.Show("JVMVRead (" + list.Count.ToStrin g() + ")", "End", MessageBoxButtons.OK, MessageBoxIc on.Information); } } finally { cJVLink.JVClose(); } }
private int MVOpen(string type, string key) => cJVLink.JVMVOpen(type , key); private int MVRead(out string buff, out int size) => cJVLink.JVMVRea d(out buff, out size); |
|
タイトル | : Re^2: C#からのMVReadの利用 |
記事No | : 4890 |
投稿日 | : 2022/06/01(Wed) 21:57 |
投稿者 | : KMY |
|
Tachyon様、ご検証くださりありがとうございます。 私も明日もう一度試してみますが、以下教えていただけますでしょうか。
・検証に利用したフレームワーク(.NET 6、.NET 5、.NET Core 3.0、.NET Fra mework 4.8など)
> エラーとなった具体的な箇所はどこなのでしょうか? 別ファイル内?
私が掲示したコードのうち、while句の行になります。
while ((result = this.link.MVRead(out buff, out size)) != 0) |
|
タイトル | : Re^3: C#からのMVReadの利用 |
記事No | : 4891 |
投稿日 | : 2022/06/01(Wed) 22:14 |
投稿者 | : KMY |
|
すみません、今調べてみたらSTAスレッド以外で実行したのが原因でした。 解決しました。お騒がせしました。 |
|
タイトル | : Re^4: C#からのMVReadの利用 |
記事No | : 4894 |
投稿日 | : 2022/06/01(Wed) 23:14 |
投稿者 | : Tachyon |
|
解決して何よりです。 見覚えがあるエラーはSTAスレッド要因だったんですね。 もう必要ないでしょうが、検証フレームワークは「.Net6」です。 |
|
|
|
copyright ©2007 JRA SYSTEM SERVICE CO.,LTD. All Rights Reserved.
|
|
|