我可以在多线程环境中从 NPAPI 插件代码调用 SetCurrentDirectory 吗?

发布于 2024-10-23 23:11:17 字数 257 浏览 1 评论 0原文

我需要从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

允世 2024-10-30 23:11:17

不,你应该避免这种情况。当前目录是每个进程的,而不是每个线程的 - 如果任何其他线程中的任何内容依赖于当前目录,您会收到随机错误。

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.

故事与诗 2024-10-30 23:11:17

感谢您的回复。
我想我找到了更好的方法:
我调用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文