一键导入
port-dll
Port DLL from AviUtl1 to AviUtl2
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Port DLL from AviUtl1 to AviUtl2
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| 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クレートを使用してください。