بنقرة واحدة
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クレートを使用してください。