Darkside(リンクエラー修正しました)

2018年9月15日(土) 21:48

難題

 誤動作する場合、プログラムコードを出来るだけシンプルにして誤動作しない状態を作るのが常道である。
 誤動作しなくなったら、プログラムコードを少しずつ追加して何が障害を発生させているかを調べる。

 その結果、トラックバーとチェックボックスは異なることが判明した。
 チェックボックスが1つだけの場合、誤動作させないプログラム記述は可能である。別種のスクリプトと合体させ、そのスクリプトのボタンを押しても普通に動作する。


 しかし同じプログラムコードでトラックバーが1つだけのものの場合、一見正常に動作するようで「補間移動」か「回転」を選んだ場合のみアプリケーションエラーが発生するのだ。原因は分からない。
 拡張プラグインから強引に呼び出されている訳で、その手法の証左が不明である以上、手探りしかない。謎な動作は、謎としか言えないのだ。
 これはやはり、通常編集用プラグインと拡張編集用プラグインの2つを公開すべきだ。とはいえ、拡張編集用プラグインが実現可能かどうかは分からない。

 厄介なのは、拡張編集では複数の同じプラグインが同時動作可能なこと。
 グローバル変数に重要な値を格納して使っていると、同時動作で変数が共有されてしまい、独立した設定動作ができない。
 これは、設定用 Window を自前で生成する場合、大きな問題となる。

 このように、タイムラインにトーンカーブ調整プラグインを2つ配置した場合・・・

 「開始時に呼ばれる関数」は1回しか実行されないし、この2つを切り替えても「設定ウィンドウにウィンドウメッセージが来た時に呼ばれる関数」に入ってくる fp->hwnd の値は変わらない。
 これでプラグインを作成すると、どこか1箇所で調整したトーンカーブがそれ以外の全箇所に反映されてしまう。

 aviutl プラグインの標準仕様に含まれているトラックバーとチェックボックスだけを使用するのであれば、別箇所に配置したプラグインには独立したトラックバー値とチェックボックス状態が支給される(はずだ)。しかし、独自に Window を開こうとすれば、複数配置されたプラグインのうちどれが編集対象になっているか?を独自に判断せねばならなくなる。

 この根本的問題が解決できないのであれば、標準編集専用としてプラグインをリリースするしかない。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4