Ae插件自定义dll搜索路径
以往的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事例工程来制作这个假插件。