我可以在多线程环境中从 NPAPI 插件代码调用 SetCurrentDirectory 吗?
我需要从 NPAPI 插件加载 gstreamer 插件,而不将插件路径添加到 PATH 环境变量,并且不使用 GStreamer 的插件注册表。
我发现唯一有效的方法是:
调用 Windows API SetCurrentDirectory,
使用 gst_plugin_load_file 加载每个插件,
调用 SetCurrentDirectory 设置回原始目录(通常是浏览器的可执行文件夹)。
在多线程设置中使用这个方法有什么问题吗?
I need to load gstreamer plugins from an NPAPI plugin, without adding the plugin path to the
PATH environment variables, and without using GStreamer's plugins registry.
The only method I found to work is:
Calling the Windows API SetCurrentDirectory,
Loading each plugin using gst_plugin_load_file,
Calling SetCurrentDirectory
to set back the original directory (normally the browser's executable folder).
Is there any problem to use this method in a multi-threaded setting?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,你应该避免这种情况。当前目录是每个进程的,而不是每个线程的 - 如果任何其他线程中的任何内容依赖于当前目录,您会收到随机错误。
gst_plugin_load_file
看起来应该支持绝对路径 - 这将是正确的方法。No, you should avoid this. The current directory is per process, not per thread - you'd get random errors if anything in any other thread depended on the current directory.
gst_plugin_load_file
looks like it should support absolute paths - that would be the right way.感谢您的回复。
我想我找到了更好的方法:
我调用 SetDllDirectory,而不是 SetCurrentDirectory。
加载 gstreamer 插件后,我调用 SetDllDirectory(NULL),
以恢复默认的 dll 搜索顺序。
Thanks for the replies.
I think I found a better way:
Instead of SetCurrentDirectory, I call SetDllDirectory.
After loading the gstreamer plugins, I call SetDllDirectory(NULL),
in order to restore the default dll search order.