gpt4 book ai didi

c++ - 如何在 Windows 中使用 glib/gtkmm 打开/生成文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:51 25 4
gpt4 key购买 nike

我已经试过了:

  GError *pError = NULL;
string uri = g_filename_to_uri(file.c_str(), NULL, &pError);
if (!g_app_info_launch_default_for_uri(uri.c_str(), NULL, &pError)) {
cout << "Failed to open uri: " << pError->message;
}

这里我收到错误“URIs not supported”。我这里创建的uri是不是错了?

我的第二种方法是使用异步命令行生成文件:

  file = quoteStr(file);
try {
Glib::spawn_command_line_async(file);
} catch (Glib::SpawnError error) {
cout << error.what();
} catch (Glib::ShellError error) {
cout << error.what();
}

此处 Glib::SpawnError 异常被抛出,错误为:“无法执行辅助程序(无效参数)”。我的意思是,当我在 Windows cmd 中执行引用的绝对文件路径时,它会打开文件(在本例中为 pdf 文件)。这个功能有什么不同吗?

最佳答案

希望这是相关的并且可以提供真正的答案,而不仅仅是(聪明!)解决方法。

我遇到了一个奇怪的情况:当可执行文件从我的构建中运行时,通过 g_app_info_launch_default_for_uri()gtk_show_uri_on_window() 启动文件(特别是 HTML 文档)有效目录。但是,如果我将 exe 复制到另一个目录(用于分发)并从那里运行它,它就不起作用了。

在后一种情况下,我得到了与您的第二个引述相同的错误:

Failed to execute helper program (Invalid argument)

构建目录不在我的路径中,也没有任何其他原因(它在临时 RAM 驱动器中)。所以我完全感到困惑。

然后我想到了那个错误......它可能在谈论什么帮助程序?

为什么从构建目录运行时可能会找到该程序?好吧,我的构建使用了一个 libtool 包装器,它在路径中放置了一堆东西,这样我们就不需要为了测试构建而复制所有 DLL 等。

因此,我去调查了 MSYS2 shell 及其 libtool 包装器可能搜索的路径中是否有任何相关的外观。当然,主要嫌疑人是 C:\msys64\mingw64\bin。看看我在那里发现了什么:

gspawn-win64-helper-console.exe

将此可执行文件复制到启动我的应用程序的目录后,我的程序现在可以成功启动 URI,无论其可执行文件当前位于哪个文件夹中。

编辑

在 MSYS2 中更新我的包后,它又回到了同样的错误 - 现在看来 this 是所需的助手:

gspawn-win64-helper.exe

这实际上更有意义,因为我的应用程序是图形化的,而不是控制台。我想最近这里可能发生了一些变化。您可以分发两者以更加安全。

关于c++ - 如何在 Windows 中使用 glib/gtkmm 打开/生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com