with one click
port-dll
Port DLL from AviUtl1 to AviUtl2
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Port DLL from AviUtl1 to AviUtl2
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | port-dll |
| description | Port DLL from AviUtl1 to AviUtl2 |
| targets | ["*"] |
AviUtl1から2の更新点として、32bit DLLから64bit DLLへの移行があります。 このプロジェクトでは、AviUtl1用のDLLをAviUtl2用のDLLに移植することを目的としています。
AviUtl1では、luaのモジュールとしてDLLでの処理が実装されていました:
require("T_Filter_Module")
T_Filter_Module.some_function()
AviUtl2では、obj.module("tim2")のように、モジュールをオブジェクトとして扱う形式に変更されました:
local tim2 = obj.module("tim2")
tim2.some_function()
obj.moduleにて使う関数は以下のように定義します:
#[aviutl2::module::functions]
impl MyModule {
fn some_function(&self, args: String) -> aviutl2::anyhow::Result<String> {
// 処理
}
}
AviUtl1では、以下のようにgetpixeldataやputpixeldataを使用して、ピクセルデータを取得・設定していました:
local userdata, width, height = obj.getpixeldata()
T_Filter_Module.some_function(userdata, width, height)
obj.putpixeldata(userdata, width, height)
AviUtl2では、シグネチャが変更されたため、以下のように書き換えます:
local userdata, width, height = obj.getpixeldata("object", "bgra")
local tim2 = obj.module("tim2")
tim2.filter_some_function(userdata, width, height)
obj.putpixeldata("object", userdata, width, height, "bgra"))
また、getpixeldata("work")は以下のように書き換えます:
obj.clearbuffer("cache:work", obj.getpixel())
local userdata, width, height = obj.getpixeldata("cache:work", "bgra")
移植前はT_${moduleName}_Module.${functionName}のように命名されていましたが、移植後は、${moduleName}_${functionName}のように命名します。
例:T_Filter_Module.some_function -> filter_some_function
また、移植時は、src/${moduleName}/${unoptimized}/${functionName}.rsのように、モジュールごと・関数ごとにファイルを分割して実装します。
例:T_Filter_Module.some_function -> src/filter/unoptimized/some_function.rs
src/${moduleName}/mod.rsには実装の呼び出しのみを記述し、実装はsrc/${moduleName}/unoptimized以下に分割して記述してください。randクレートを使用してください。