DTXMania Online Statsのプラグインが101で動作しない
まず、IRPlugin.dllが読み込めない原因は、(私が持っている内部ビルドにおいて) 基盤のプラットフォームを.NET Framework 4.5に変更しているため。 対策として、rev820で以下の対応を実施した。
これで読み込みはOKになったが、今度はSlimDXが読み込めなくなった。 「警告: アセンブリ名の比較の結果、NAME の不一致が見つかりました。」 とのこと。 (ここまで対応したモジュールを、本チケットに添付しました。作業部屋 https://osdn.jp/users/yyagi/pf/DTXMania_TestBuilds/files/?action=simple_list の101のモジュールからの差分になります。元に戻すときは、DTXManiaGR.exe.config も元に戻すのをお忘れなく)
具体的には、下記のようなエラーになります。
System.IO.FileNotFoundException はハンドルされませんでした。 HResult=-2147024894 Message=ファイルまたはアセンブリ 'SlimDXc_net20x86_Jun2010, Version=1002.0.10.43, Culture=neutral, PublicKeyToken=53d0e4ef1f1579f5'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 Source=IRPlugin FileName=SlimDXc_net20x86_Jun2010, Version=1002.0.10.43, Culture=neutral, PublicKeyToken=53d0e4ef1f1579f5 FusionLog==== 事前バインド状態情報 === ログ: DisplayName = SlimDXc_net20x86_Jun2010, Version=1002.0.10.43, Culture=neutral, PublicKeyToken=53d0e4ef1f1579f5 (Fully-specified) ログ: Appbase = file:///(中略) ログ: Initial PrivatePath = NULL 呼び出しているアセンブリ: IRPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null === ログ: このバインドは LoadFrom の読み込みコンテキストで開始します。 警告: ネイティブ イメージは LoadFrom コンテキストで調査されません。ネイティブ イメージは、Assembly.Load() を使用するなどの既定の読み込みコンテキストでのみ調査されます。 ログ: アプリケーション構成ファイル (中略)DTXManiaGR.exe.Config を使用します。 ログ: ホスト構成ファイル を使用します。 ログ: C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config からのコンピューター構成ファイルを使用します。 ログ: ポリシー後の参照: SlimDXc_net20x86_Jun2010, Version=1002.0.10.43, Culture=neutral, PublicKeyToken=53d0e4ef1f1579f5 ログ: 新しい URL file:///(中略)SlimDXc_net20x86_Jun2010.DLL をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)SlimDXc_net20x86_Jun2010/SlimDXc_net20x86_Jun2010.DLL をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)dll/SlimDXc_net20x86_Jun2010.DLL をダウンロードしようとしています。 警告: アセンブリ名の比較の結果、NAME の不一致が見つかりました。 ログ: 新しい URL file:///(中略)dll/SlimDXc_net20x86_Jun2010/SlimDXc_net20x86_Jun2010.DLL をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)SlimDXc_net20x86_Jun2010.EXE をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)SlimDXc_net20x86_Jun2010/SlimDXc_net20x86_Jun2010.EXE をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)dll/SlimDXc_net20x86_Jun2010.EXE をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)dll/SlimDXc_net20x86_Jun2010/SlimDXc_net20x86_Jun2010.EXE をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)Plugins/SlimDXc_net20x86_Jun2010.DLL をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)Plugins/SlimDXc_net20x86_Jun2010/SlimDXc_net20x86_Jun2010.DLL をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)Plugins/SlimDXc_net20x86_Jun2010.EXE をダウンロードしようとしています。 ログ: 新しい URL file:///(中略)Plugins/SlimDXc_net20x86_Jun2010/SlimDXc_net20x86_Jun2010.EXE をダウンロードしようとしています。 StackTrace: 場所 DTXMania.IRPlugin.On進行描画(CPad pad, IInputDevice keyboard) 場所 DTXMania.CDTXMania.Draw(GameTime gameTime) 場所 (中略)全体\CDTXMania.cs:行 605 場所 SampleFramework.Game.DrawFrame() 場所 SampleFramework.Game.Window_Paint(Object sender, PaintEventArgs e) 場所 System.Windows.Forms.Control.OnPaint(PaintEventArgs e) 場所 System.Windows.Forms.Form.OnPaint(PaintEventArgs e) 場所 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer) 場所 System.Windows.Forms.Control.WmPaint(Message& m) 場所 System.Windows.Forms.Control.WndProc(Message& m) 場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m) 場所 System.Windows.Forms.Form.WndProc(Message& m) 場所 SampleFramework.GameWindow.WndProc(Message& m) 場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException:
・・・なるほど、IRPlugin.dll は、099cのSlimDX (SlimDXc_net20x86_Jun2010, Version=1002.0.10.43) を期待しているけど、101は (SlimDXc_net20x86_Jun2010, Version=4.0.10.43) になってしまっているから はまっている、ということのようです。
・・・101のslimdxも、1002.0.10.43にしてみますか・・・。
101のslimdxについて、内部バージョンを1002.0.10.43にして、DTXManiaGR.exe.config 内の同バージョン情報も置換したが、現象変わらず。IRPlugin.dllからのSlimDX呼び出しでGPF発生。
んー、厳密名は一致しているはずなのですけれど、何が問題なのでしょうか。
はじめまして、当プラグイン作者の chnmr0 と申します。
フォーラムでのご紹介ありがとうございます。 まだ欠陥等あるシステムではありますが、よろしくお願いいたします。
問題の根本的な解決にはなってはいないと思いますが、 101のバイナリでリンクしてビルドし、 101対応版プラグインを追加させていただきました。
chnmr0さん、コメントありがとうございます。 (わざわざOSDNのアカウントまで作成いただいて恐縮です)
また、101向けのリビルド版も作成いただきありがとうございました。 何とかdllを099c用と101以降用で共用にしたいのですが、現状リビルドしないと動作しないということなのですね。
実は、今開発中の102では、まだIRPlugin.dllをうまく動作させることができていません。 動作環境を.NET Framework 4.5.1に変えているため、101用のモジュールを使わせていただいてもなお、 プラグインからのSlimDX呼び出しでコケてうまく動作していません。
SlimDXの厳密名を両者で一致させているはずが一致していないようで、うまくいっていません。 (099cで使っている.NET Framework 2.0と比較して) .config周りの仕様変更でハマっていたりします。
本体からの"厳密名SlimDXの呼び出し"は成功して、IRPlugin.dllからの"厳密名SlimDXc_net20x86_Jun2010の呼び出し" でコケているようなのですが、なぜにこのような動作になってしまっているのやら。 むしろ逆の動作になるのならまだ分かるのですが・・・なぜでしょう。もう少し調べてみます。
yyagi さん
作っておきながら申し訳ありませんが、こちらでも原因がわかりません・・・
いまは SlimDX へのリンクをやめて(描画機能を排除)登録機能のみのプラグインにしようと考えております。
関連情報の描画プログラムは(もしご迷惑でなければ)私が本体に組み込み、
サイトのデータベースに保存された演奏履歴の情報はAPIを通じて取得するといった感じです。
chnmr0さん
コメントありがとうございます。
SlimDXの利用について、もうちょっとあがいてみたいので、もし差し支えなければ、IRPlugin.dllのソースコードをプロジェクトごと私(yyagi.dtxmania あっと gmail.com)にお送りいただくことはできますでしょうか。 (もちろん、ソースコードそのものを含め、内部情報を外部に漏らすことは致しません)
こちらでビルド環境をちょっとこねくり回してみて、ダメならば (or ソース提供不可ならば)、chnmr0さんのご提案通り、描画系のI/Fを本体に組み込んでいただければと存じます。
若しくは、いい機会なのでSharpDXに移行してしまうか・・・。
yyagiさん
承知いたしました。 ご面倒をおかけします。
私のプロジェクト設定等に不備があると思いますので、ソリューションごと今晩送信いたします。 (VS 2013 Community Update 4 で保存したソリューションになります)
反応が遅くなり、申し訳ございませんでした。おかげさまで何とか修正できました。
Rel101の次期バージョン(102)のSlimDXのビルド方法を変更し、厳密名の不整合が発生しないようにすることができました。
いまさらですが、これでプラグインからSlimDX機能を呼び出すことができるはず。 また、099cと101とで同じプラグインを使えるようになったはず。 (注: プラグインからの参照EXE/DLL指定は、099cのもの(.NET2.0用のもの)に対して指定してください)
修正コードは先ほどRev828としてコミット済みですが、 https://osdn.jp/users/yyagi/pf/DTXMania_TestBuilds/files/?action=simple_list の DTXManiaGR101_plugindbg_20150806.zip を101環境に上書きしてお試しください。
yyagiさん お忙しい中ご対応いただきありがとうございました。 (フォーラムを読ませていただいたところ、海外出張中とのことで・・・恐縮です)
099c,101で動作を確認いたしました(バイナリもありがとうございます)。 101では DTXManiaGR101_plugindbg_20150806.zip の内容を環境に上書きする旨の説明を添えたいと思います。
chnmr0さん、動作確認いただきありがとうございました。 そちらでも期待通りに動作したようで、安心しました。
(海外出張ではなく、海外赴任です・・・毎日がサバイバルです・・・)
さて、さすがにユーザーさんに"IRPlugin使用の場合はこのパッチをあててネ"とは言いづらいので、 今週末に102をリリースすることにいたします。 (開発環境がVS2013CUどまりで中途半端なので、一足飛びにVS2015CUにしておきたかったですが・・・ これは次回に延期します)
ところで、全然別件の話なのですが、私は以前、DSP1のIRの開発管理を行っていました。その時のDB設計資料やらphp/htmlやらが残っているのでお送りすることができますが、必要でしょうか? (実際のDBデータだけは行方不明です。すみません)
yyagiさん
102のリリースお疲れ様です。 早速ダウンロードページのほうを修正したいと思います。
IRについてですが、私もDSPやそれ以降のパッケージIRについて気になっていました (参加の記憶はあるのですが、どんな感じだったかほとんど覚えていない)ので、 ご面倒でなければ、IRの資料・その他ご教授いただけますとうれしいです。
度々更新失礼いたします。
ログインを忘れておりました。 上記書き込み(2015-08-09 01:32)は私のものです。
chnmr0さん
102をリリースしました。何か問題あれば、遠慮なくおっしゃってください。
DSP1のIR資料ですが、取り急ぎコアなものだけをメールでお送りいたしました。 フルでお送りしようとしたところ300MB程度の7zファイルができまして、Gmailで送ろうとすると上限(25MB)に引っかかって送信できなかったため、何か代わりの送付手段をご提案いただけますでしょうか。
chnmr0さん
メールで、フルセットの格納先をご連絡いたしました。
なお10x系と099xのプライグインの共通化は、ウインドウの縦横比を見て4:3寄りか16:9寄りかでUI表示を分けることで対応可能かと思います。(ウインドウサイズの拡縮は可能ですが、縦横比を維持して拡縮しますので)
それと、確かCDTXクラスにプラグインからアクセスできるようにして欲しい的なお話をどこかで拝見したように思います。おそらく直ちに次の版を出さなければならなさそうな状況ですので・・・、その際についでに対応させていただければと存じます。また、他にもこのようなクラスがあればお知らせください。そして、他にも何か本体側で対応希望事項がございましたら、遠慮なくおっしゃってください。
yyagi さん
確認いたしました。
ありがとうございました。
お返事が遅れてしまい申し訳ございません。
クラスのアクセスについては新規にチケットを発行すべきでしょうか?
既に代替手段もございまして、すぐに対応していただきたいという内容ではありません。
このチケットの内容からだいぶ外れてしまいますが以下に書かせていただきます。
上記2クラスを public にしていただきたいです
(理由は、曲情報を登録する補助ツールで利用したいと考えているためです)。
そして、これはまだ構想の段階なのですがゴーストを生成できたらいいかなと考えておりまして、
DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs:726
e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime )
のあたりでプラグインを呼び出していただくことでそれらしいことができないかなと考えております。
脱線してしまい申し訳ありませんが、以上です。
すみません、緊急の別件対応が必要だったため、特定クラスのpublic化は次の機会に回させていただきました。
で、このあたり(public化, ゴースト, その他機能変更やバグ修正依頼等あれば)は、新規チケットを起こしていただけると助かります。取り急ぎ、ここでお話しいただいた分につきましては、私の方で別途チケットを作成いたしますので、適宜修正いただけますと幸いです。
なお、全然別件ですが、過去のパッケージイベントについて、このあたりが参考になるかもしれません; http://www27.atwiki.jp/gdadtxevents/
なお、こちらのチケットは、そろそろ役目を終えたと思いますので、クローズさせていただきます。
DTXManiaGR Rev101で、DTXMania Online Statsのプラグイン(IRPlugin.dll)が動作しない。
Rev099cでは正常動作する。