aviutl2_sys/
plugin2.rs

1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use crate::common::LPCWSTR;
4use crate::{
5    filter2::FILTER_PLUGIN_TABLE, input2::INPUT_PLUGIN_TABLE, module2::SCRIPT_MODULE_TABLE,
6    output2::OUTPUT_PLUGIN_TABLE,
7};
8use std::ffi::c_void;
9use std::os::raw::c_char;
10
11pub use windows_sys::Win32::Foundation::{HINSTANCE, HWND};
12
13pub type LPCSTR = *const c_char;
14
15/// オブジェクトハンドル
16pub type OBJECT_HANDLE = *mut c_void;
17
18/// レイヤー・フレーム情報構造体
19/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
20#[repr(C)]
21pub struct OBJECT_LAYER_FRAME {
22    /// レイヤー番号
23    pub layer: i32,
24    /// 開始フレーム番号
25    pub start: i32,
26    /// 終了フレーム番号
27    pub end: i32,
28}
29
30/// メディア情報構造体
31#[repr(C)]
32pub struct MEDIA_INFO {
33    /// Videoトラック数 ※0ならVideo無し
34    pub video_track_num: i32,
35    /// Audioトラック数 ※0ならAudio無し
36    pub audio_track_num: i32,
37    /// 総時間 ※静止画の場合は0
38    pub total_time: f64,
39    /// 解像度
40    pub width: i32,
41    /// 解像度
42    pub height: i32,
43}
44
45/// 編集情報構造体
46/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
47#[repr(C)]
48pub struct EDIT_INFO {
49    /// シーンの解像度
50    pub width: i32,
51    /// シーンの解像度
52    pub height: i32,
53    /// シーンのフレームレート
54    pub rate: i32,
55    /// シーンのフレームレート
56    pub scale: i32,
57    /// シーンのサンプリングレート
58    pub sample_rate: i32,
59    /// 現在のカーソルのフレーム番号
60    pub frame: i32,
61    /// 現在の選択レイヤー番号
62    pub layer: i32,
63    /// オブジェクトが存在する最大のフレーム番号
64    pub frame_max: i32,
65    /// オブジェクトが存在する最大のレイヤー番号
66    pub layer_max: i32,
67    /// レイヤー編集で表示されているフレームの開始番号
68    pub display_frame_start: i32,
69    /// レイヤー編集で表示されているレイヤーの開始番号
70    pub display_layer_start: i32,
71    /// レイヤー編集で表示されているフレーム数 ※厳密ではないです
72    pub display_frame_num: i32,
73    /// レイヤー編集で表示されているレイヤー数 ※厳密ではないです
74    pub display_layer_num: i32,
75    /// フレーム範囲選択の開始フレーム番号 ※未選択の場合は-1
76    pub select_range_start: i32,
77    /// フレーム範囲選択の終了フレーム番号 ※未選択の場合は-1
78    pub select_range_end: i32,
79    /// グリッド(BPM)のテンポ
80    pub grid_bpm_tempo: f32,
81    /// グリッド(BPM)の拍子
82    pub grid_bpm_beat: i32,
83    /// グリッド(BPM)の基準時間
84    pub grid_bpm_offset: f32,
85    /// シーンのID
86    pub scene_id: i32,
87}
88
89/// 編集セクション構造体
90/// メニュー選択やプロジェクト編集のコールバック関数内で利用出来ます
91/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
92#[repr(C)]
93pub struct EDIT_SECTION {
94    /// 編集情報
95    pub info: *mut EDIT_INFO,
96
97    /// 指定の位置にオブジェクトエイリアスを作成します
98    /// alias : オブジェクトエイリアスデータ(UTF-8)へのポインタ
99    ///      オブジェクトエイリアスファイルと同じフォーマットになります
100    /// layer : 作成するレイヤー番号
101    /// frame : 作成するフレーム番号
102    /// length : オブジェクトのフレーム数 ※エイリアスデータにフレーム情報がある場合はフレーム情報から長さが設定されます
103    ///      フレーム数に0を指定した場合は長さや追加位置が自動調整されます
104    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
105    ///      既に存在するオブジェクトに重なったり、エイリアスデータが不正な場合に失敗します
106    pub create_object_from_alias:
107        unsafe extern "C" fn(alias: LPCSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
108
109    /// 指定のフレーム番号以降にあるオブジェクトを検索します
110    /// layer : 検索対象のレイヤー番号
111    /// frame : 検索を開始するフレーム番号
112    /// 戻り値 : 検索したオブジェクトのハンドル (見つからない場合はnullptrを返却)
113    pub find_object: unsafe extern "C" fn(layer: i32, frame: i32) -> OBJECT_HANDLE,
114
115    /// オブジェクトに対象エフェクトが何個存在するかを取得します
116    /// object : オブジェクトのハンドル
117    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
118    /// 戻り値 : 対象エフェクトの数 ※存在しない場合は0
119    pub count_object_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> i32,
120
121    /// オブジェクトのレイヤー・フレーム情報を取得します
122    /// object : オブジェクトのハンドル
123    /// 戻り値 : オブジェクトのレイヤー・フレーム情報
124    pub get_object_layer_frame: unsafe extern "C" fn(object: OBJECT_HANDLE) -> OBJECT_LAYER_FRAME,
125
126    /// オブジェクトのエイリアスデータを取得します
127    /// object : オブジェクトのハンドル
128    /// 戻り値 : オブジェクトエイリアスデータ(UTF-8)へのポインタ (取得出来ない場合はnullptrを返却)
129    ///      オブジェクトエイリアスファイルと同じフォーマットになります
130    ///      ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
131    pub get_object_alias: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCSTR,
132
133    /// オブジェクトの設定項目の値を文字列で取得します
134    /// object : オブジェクトのハンドル
135    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
136    ///          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
137    ///          get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
138    /// item  : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
139    /// 戻り値 : 取得した設定値(UTF8)へのポインタ (取得出来ない場合はnullptrを返却)
140    ///      エイリアスファイルの設定値と同じフォーマットになります
141    ///      ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
142    pub get_object_item_value:
143        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR, item: LPCWSTR) -> LPCSTR,
144
145    /// オブジェクトの設定項目の値を文字列で設定します
146    /// object : オブジェクトのハンドル
147    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
148    ///          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
149    ///          get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
150    /// item  : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
151    /// value : 設定値(UTF8)
152    ///      エイリアスファイルの設定値と同じフォーマットになります
153    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
154    pub set_object_item_value: unsafe extern "C" fn(
155        object: OBJECT_HANDLE,
156        effect: LPCWSTR,
157        item: LPCWSTR,
158        value: LPCSTR,
159    ) -> bool,
160
161    /// オブジェクトを移動します
162    /// object : オブジェクトのハンドル
163    /// layer : 移動先のレイヤー番号
164    /// frame : 移動先のフレーム番号
165    /// 戻り値 : 移動した場合はtrue (移動先にオブジェクトが存在する場合は失敗します)
166    pub move_object: unsafe extern "C" fn(object: OBJECT_HANDLE, layer: i32, frame: i32) -> bool,
167
168    /// オブジェクトを削除します
169    /// object : オブジェクトのハンドル
170    pub delete_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
171
172    /// オブジェクト設定ウィンドウで選択されているオブジェクトのハンドルを取得します
173    /// 戻り値 : オブジェクトのハンドル (未選択の場合はnullptrを返却)
174    pub get_focus_object: unsafe extern "C" fn() -> OBJECT_HANDLE,
175
176    /// オブジェクト設定ウィンドウで選択するオブジェクトを設定します (コールバック処理の終了時に設定されます)
177    /// object : オブジェクトのハンドル
178    pub set_focus_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
179
180    /// プロジェクトファイルのポインタを取得します
181    /// EDIT_HANDLE : 編集ハンドル
182    /// 戻り値 : プロジェクトファイル構造体へのポインタ ※コールバック処理の終了まで有効
183    pub get_project_file: unsafe extern "C" fn(edit: *mut EDIT_HANDLE) -> *mut PROJECT_FILE,
184
185    /// 選択中オブジェクトのハンドルを取得します
186    /// index : 選択中オブジェクトのインデックス(0〜)
187    /// 戻り値 : 指定インデックスのオブジェクトのハンドル (インデックスが範囲外の場合はnullptrを返却)
188    pub get_selected_object: unsafe extern "C" fn(index: i32) -> OBJECT_HANDLE,
189
190    /// 選択中オブジェクトの数を取得します
191    /// 戻り値 : 選択中オブジェクトの数
192    pub get_selected_object_num: unsafe extern "C" fn() -> i32,
193
194    /// マウス座標のレイヤー・フレーム位置を取得します
195    /// 最後のマウス移動のウィンドウメッセージの座標から計算します
196    /// layer : レイヤー番号の格納先
197    /// frame : フレーム番号の格納先
198    /// 戻り値 : マウス座標がレイヤー編集上の場合はtrue
199    pub get_mouse_layer_frame: unsafe extern "C" fn(layer: *mut i32, frame: *mut i32) -> bool,
200
201    /// 指定のスクリーン座標のレイヤー・フレーム位置を取得します
202    /// x,y   : 対象のスクリーン座標
203    /// layer : レイヤー番号の格納先
204    /// frame : フレーム番号の格納先
205    /// 戻り値 : スクリーン座標がレイヤー編集上の場合はtrue
206    pub pos_to_layer_frame:
207        unsafe extern "C" fn(x: i32, y: i32, layer: *mut i32, frame: *mut i32) -> bool,
208
209    /// 指定のメディアファイルがサポートされているかを確認します
210    /// file   : メディアファイルのパス
211    /// strict : trueの場合は実際に読み込めるかを確認します
212    ///      falseの場合は拡張子が対応しているかを確認します
213    /// 戻り値 : サポートされている場合はtrue
214    pub is_support_media_file: unsafe extern "C" fn(file: LPCWSTR, strict: bool) -> bool,
215
216    /// 指定のメディアファイルの情報を取得します ※動画、音声、画像ファイル以外では取得出来ません
217    /// file : メディアファイルのパス
218    /// info : メディア情報の格納先へのポインタ
219    /// info_size : メディア情報の格納先のサイズ ※MEDIA_INFOと異なる場合はサイズ分のみ取得されます
220    /// 戻り値 : 取得出来た場合はtrue
221    pub get_media_info:
222        unsafe extern "C" fn(file: LPCWSTR, info: *mut MEDIA_INFO, info_size: i32) -> bool,
223
224    /// 指定の位置にメディアファイルからオブジェクトを作成します
225    /// file  : メディアファイルのパス
226    /// layer : 作成するレイヤー番号
227    /// frame : 作成するフレーム番号
228    /// length : オブジェクトのフレーム数
229    ///      フレーム数に0を指定した場合は長さや追加位置が自動調整されます
230    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
231    ///      既に存在するオブジェクトに重なったり、メディアファイルに対応していない場合は失敗します
232    pub create_object_from_media_file:
233        unsafe extern "C" fn(file: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
234
235    /// 指定の位置にオブジェクトを作成します
236    /// effect : エフェクト名 (エイリアスファイルのeffect.nameの値)
237    /// layer : 作成するレイヤー番号
238    /// frame : 作成するフレーム番号
239    /// length : オブジェクトのフレーム数
240    ///      フレーム数に0を指定した場合は長さや追加位置が自動調整されます
241    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
242    ///      既に存在するオブジェクトに重なったり、指定エフェクトに対応していない場合は失敗します
243    pub create_object:
244        unsafe extern "C" fn(effect: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
245
246    /// 現在のレイヤー・フレーム位置を設定します ※設定出来る範囲に調整されます
247    /// layer : レイヤー番号
248    /// frame : フレーム番号
249    pub set_cursor_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
250
251    /// レイヤー編集のレイヤー・フレームの表示開始位置を設定します ※設定出来る範囲に調整されます
252    /// layer : 表示開始レイヤー番号
253    /// frame : 表示開始フレーム番号
254    pub set_display_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
255
256    /// フレーム範囲選択を設定します ※設定出来る範囲に調整されます
257    /// start,end : 開始終了フレーム番号
258    ///      開始終了フレームの両方に-1を指定すると選択を解除します
259    pub set_select_range: unsafe extern "C" fn(start: i32, end: i32),
260
261    /// グリッド(BPM)を設定します
262    /// tempo : テンポ
263    /// beat  : 拍子
264    /// offset : 基準時間
265    pub set_grid_bpm: unsafe extern "C" fn(tempo: f32, beat: i32, offset: f32),
266
267    /// オブジェクト名を取得します
268    /// object : オブジェクトのハンドル
269    /// 戻り値 : オブジェクト名へのポインタ (標準の名前の場合はnullptrを返却)
270    ///      ※オブジェクトの編集をするかコールバック処理の終了まで有効
271    pub get_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCWSTR,
272
273    /// オブジェクト名を設定します
274    /// object : オブジェクトのハンドル
275    /// name : オブジェクト名 (nullptrか空文字を指定すると標準の名前になります)
276    pub set_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE, name: LPCWSTR),
277}
278
279/// 編集ハンドル構造体
280#[repr(C)]
281pub struct EDIT_HANDLE {
282    /// プロジェクトデータの編集をする為のコールバック関数(func_proc_edit)を呼び出します
283    /// 編集情報を排他制御する為にコールバック関数内で編集処理をする形になります
284    /// コールバック関数内で編集したオブジェクトは纏めてUndoに登録されます
285    /// コールバック関数はメインスレッドから呼ばれます
286    /// func_proc_edit : 編集処理のコールバック関数
287    /// 戻り値   : trueなら成功
288    ///        編集が出来ない場合(出力中等)に失敗します
289    pub call_edit_section:
290        unsafe extern "C" fn(func_proc_edit: unsafe extern "C" fn(edit: *mut EDIT_SECTION)) -> bool,
291
292    /// call_edit_section()に引数paramを渡せるようにした関数です
293    pub call_edit_section_param: unsafe extern "C" fn(
294        param: *mut c_void,
295        func_proc_edit: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
296    ) -> bool,
297
298    /// 編集情報を取得します
299    /// 既に編集処理中(EDIT_SECTIONが引数のコールバック関数内等)の場合は利用出来ません ※デッドロックします
300    /// info : 編集情報の格納先へのポインタ
301    /// info_size : 編集情報の格納先のサイズ ※EDIT_INFOと異なる場合はサイズ分のみ取得されます
302    pub get_edit_info: unsafe extern "C" fn(info: *mut EDIT_INFO, info_size: i32),
303
304    /// ホストアプリケーションを再起動します
305    pub restart_host_app: unsafe extern "C" fn(),
306
307    /// エフェクト名の一覧をコールバック関数(func_proc_enum_effect)で取得します
308    /// param : 任意のユーザーデータのポインタ
309    /// func_proc_enum_effect : エフェクト名の取得処理のコールバック関数
310    pub enum_effect_name: unsafe extern "C" fn(
311        param: *mut c_void,
312        func_proc_enum_effect: unsafe extern "C" fn(
313            param: *mut c_void,
314            name: LPCWSTR,
315            r#type: i32,
316            flag: i32,
317        ),
318    ),
319}
320
321impl EDIT_HANDLE {
322    /// エフェクト種別:フィルタ効果 ※今後追加される可能性があります
323    pub const EFFECT_TYPE_FILTER: i32 = 1;
324    /// エフェクト種別:メディア入力 ※今後追加される可能性があります
325    pub const EFFECT_TYPE_INPUT: i32 = 2;
326    /// エフェクト種別:シーンチェンジ ※今後追加される可能性があります
327    pub const EFFECT_TYPE_TRANSITION: i32 = 3;
328    /// エフェクトフラグ:画像をサポート ※今後追加される可能性があります
329    pub const EFFECT_FLAG_VIDEO: i32 = 1;
330    /// エフェクトフラグ:音声をサポート ※今後追加される可能性があります
331    pub const EFFECT_FLAG_AUDIO: i32 = 2;
332    /// エフェクトフラグ:フィルタオブジェクトをサポート ※今後追加される可能性があります
333    pub const EFFECT_FLAG_FILTER: i32 = 4;
334}
335
336/// プロジェクトファイル構造体
337/// プロジェクトファイルのロード、セーブ時のコールバック関数内で利用出来ます
338/// プロジェクトの保存データはプラグイン毎のデータ領域になります
339#[repr(C)]
340pub struct PROJECT_FILE {
341    /// プロジェクトに保存されている文字列(UTF-8)を取得します
342    /// key  : キー名(UTF-8)
343    /// 戻り値 : 取得した文字列へのポインタ (未設定の場合はnullptr)
344    pub get_param_string: unsafe extern "C" fn(key: LPCSTR) -> LPCSTR,
345    /// プロジェクトに文字列(UTF-8)を保存します
346    /// key  : キー名(UTF-8)
347    /// value : 保存する文字列(UTF-8)
348    pub set_param_string: unsafe extern "C" fn(key: LPCSTR, value: LPCSTR),
349    /// プロジェクトに保存されているバイナリデータを取得します
350    /// key  : キー名(UTF-8)
351    /// data  : 取得するデータの格納先へのポインタ
352    /// size  : 取得するデータのサイズ (保存されているサイズと異なる場合は失敗します)
353    /// 戻り値 : 正しく取得出来た場合はtrue
354    pub get_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32) -> bool,
355    /// プロジェクトにバイナリデータを保存します
356    /// key  : キー名(UTF-8)
357    /// data  : 保存するデータへのポインタ
358    /// size  : 保存するデータのサイズ (4096バイト以下)
359    pub set_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32),
360    /// プロジェクトに保存されているデータを全て削除します
361    pub clear_params: unsafe extern "C" fn(),
362
363    /// プロジェクトファイルのパスを取得します
364    /// 戻り値 : プロジェクトファイルパスへのポインタ (ファイルパスは未設定の場合があります)
365    ///      ※コールバック処理の終了まで有効
366    pub get_project_file_path: unsafe extern "C" fn() -> LPCWSTR,
367}
368
369/// ホストアプリケーション構造体
370#[repr(C)]
371pub struct HOST_APP_TABLE {
372    /// プラグインの情報を設定する
373    /// information : プラグインの情報
374    pub set_plugin_information: unsafe extern "C" fn(information: LPCWSTR),
375
376    /// 入力プラグインを登録する
377    /// input_plugin_table : 入力プラグイン構造体
378    pub register_input_plugin: unsafe extern "C" fn(input_plugin_table: *mut INPUT_PLUGIN_TABLE),
379    /// 出力プラグインを登録する
380    /// output_plugin_table : 出力プラグイン構造体
381    pub register_output_plugin: unsafe extern "C" fn(output_plugin_table: *mut OUTPUT_PLUGIN_TABLE),
382    /// フィルタプラグインを登録する
383    /// filter_plugin_table : フィルタプラグイン構造体
384    pub register_filter_plugin: unsafe extern "C" fn(filter_plugin_table: *mut FILTER_PLUGIN_TABLE),
385    /// スクリプトモジュールを登録する
386    /// script_module_table : スクリプトモジュール構造体
387    pub register_script_module: unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE),
388
389    /// インポートメニューを登録する
390    /// name    : インポートメニューの名称
391    /// func_proc_import : インポートメニュー選択時のコールバック関数
392    pub register_import_menu: unsafe extern "C" fn(
393        name: LPCWSTR,
394        func_proc_import: unsafe extern "C" fn(*mut EDIT_SECTION),
395    ),
396    /// エクスポートメニューを登録する
397    /// name    : エクスポートメニューの名称
398    /// func_proc_export : エクスポートメニュー選択時のコールバック関数
399    pub register_export_menu: unsafe extern "C" fn(
400        name: LPCWSTR,
401        func_proc_export: unsafe extern "C" fn(*mut EDIT_SECTION),
402    ),
403
404    /// ウィンドウクライアントを登録する
405    /// name  : ウィンドウの名称
406    /// hwnd  : ウィンドウハンドル
407    /// ウィンドウにはWS_CHILDが追加され親ウィンドウが設定されます ※WS_POPUPは削除されます
408    pub register_window_client: unsafe extern "C" fn(name: LPCWSTR, hwnd: HWND),
409
410    /// プロジェクトデータ編集用のハンドルを取得します
411    /// 戻り値 : 編集ハンドル
412    pub create_edit_handle: unsafe extern "C" fn() -> *mut EDIT_HANDLE,
413
414    /// プロジェクトファイルをロードした直後に呼ばれる関数を登録する ※プロジェクトの初期化時にも呼ばれます
415    /// func_project_load : プロジェクトファイルのロード時のコールバック関数
416    pub register_project_load_handler:
417        unsafe extern "C" fn(func_project_load: unsafe extern "C" fn(*mut PROJECT_FILE)),
418    /// プロジェクトファイルをセーブする直前に呼ばれる関数を登録する
419    /// func_project_save : プロジェクトファイルのセーブ時のコールバック関数
420    pub register_project_save_handler:
421        unsafe extern "C" fn(func_project_save: unsafe extern "C" fn(*mut PROJECT_FILE)),
422
423    /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
424    /// name : レイヤーメニューの名称
425    /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
426    pub register_layer_menu: unsafe extern "C" fn(
427        name: LPCWSTR,
428        func_proc_layer_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
429    ),
430
431    /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
432    /// name : オブジェクトメニューの名称
433    /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
434    pub register_object_menu: unsafe extern "C" fn(
435        name: LPCWSTR,
436        func_proc_object_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
437    ),
438
439    /// 設定メニューを登録する
440    /// 設定メニューの登録後にウィンドウクライアントを登録するとシステムメニューに「設定」が追加されます
441    /// name : 設定メニューの名称
442    /// func_config : 設定メニュー選択時のコールバック関数
443    pub register_config_menu:
444        unsafe extern "C" fn(name: LPCWSTR, func_config: unsafe extern "C" fn(HWND, HINSTANCE)),
445
446    /// 編集メニューを登録する
447    /// name : 編集メニューの名称 ※名称に'\'を入れると表示を階層に出来ます
448    /// func_proc_edit_menu : 編集メニュー選択時のコールバック関数
449    pub register_edit_menu: unsafe extern "C" fn(
450        name: LPCWSTR,
451        func_proc_edit_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
452    ),
453
454    /// キャッシュを破棄の操作時に呼ばれる関数を登録する
455    /// func_proc_clear_cache : キャッシュの破棄時のコールバック関数
456    pub register_clear_cache_handler:
457        unsafe extern "C" fn(func_proc_clear_cache: unsafe extern "C" fn(*mut EDIT_SECTION)),
458
459    /// シーンを変更した直後に呼ばれる関数を登録する ※シーンの設定情報が更新された時にも呼ばれます
460    /// func_proc_change_scene : シーン変更時のコールバック関数
461    pub register_change_scene_handler:
462        unsafe extern "C" fn(func_proc_change_scene: unsafe extern "C" fn(*mut EDIT_SECTION)),
463}