タイトル | : 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
)result);
}
var size = 19;
var list = new List();
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((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((JVLin
kMovieResult)result);
MessageBox.Show(“JVMVOpen (” + openResult.ToStrin
g() + “)”, “Error”, MessageBoxButtons.OK, MessageBox
Icon.Error);
return;
}
var size = 19;
var list = new List();
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((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」です。|