欢迎光临散文网 会员登陆 & 注册

Ae插件自定义dll搜索路径

2023-01-31 02:20 作者:朵格子Dolag  | 我要投稿

    以往的ae插件开发过程中,我们必须把插件所引用的dlls放到 "Support Files"中,这是非常麻烦的。本篇专栏提出一个相对优雅的方法来解决Windows中的这个问题。

    要做到这一点,我们需要先知道关于插件加载顺序的两个规则。

    第一是关于同一文件夹下插件和子文件夹的扫描顺序。我测试了某种插件的名称,得到的结果是'$' > '%' > '0'-'9' > '' > '^' 。> '_' > '{',举例来说,以下插件加载的顺序是"$foo.aex" > "%foo.aex" > "0foo.aex" > "9foo.aex" > "foo.aex" > "^foo.aex" > "_foo.aex" > "{foo.aex" 。上面的规则把文件和目录视为相同的东西,当扫描一个目录时,AE会进入此文件夹继续扫描该文件夹下的项目。

    第二,AE首先在 "MediaCore "下加载插件,然后再加载 "Plug-ins"里的插件。

    所以解决方案是,制作一个插件,在加载时调用的DllMain函数中,将自定义的dll搜索路径加入程序的环境变量 "PATH"中,并按照上述规则,确保这个假插件在你真正的插件之前加载,例如说你可以在"MediaCore"文件夹下放置插件"$foo.aex",这样可以基本上确保此插件在真正的"foo.aex"之前调用。


DllMain函数可以定义如下(手机端不能插入代码片段,凑合看吧)。


// DllMain在从进程或线程加载时被调用

BOOL WINAPI DllMain(HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

) {

    //在加载时设置环境,用于进程_附加

    // 不是thread_attach

如果(ul_reason_for_call == DLL_PROCESS_ATTACH) {

_wputenv_s("PATH", LR"(C:\your\dll\folder)"); // 设置环境。

返回true。

}

}

 

    最后一个问题是如何隐藏这个插件,防止出现在"效果与预设"里面。你可以在PiPL中简单地将 "Kind "属性设置为 "AEGP",防止它被搜索到。建议基于SDK的某个AEGP事例工程来制作这个假插件。


Ae插件自定义dll搜索路径的评论 (共 条)

分享到微博请遵守国家法律