MinGW - Header 不完整 <netfw.h>

MinGW - Header incomplete <netfw.h>

我正在使用 C++ 开发网络应用程序,它应该能够向 windows 防火墙添加规则。我正在使用 MingW g++ 编译器 关注 this example。 其他示例运行没有问题,但这个特定示例将无法运行。

我面临的确切问题是 NetFwRule 未在 MinGW 提供的 <netfw.h> header 中定义。当我尝试用 MSVC(在 Visual Studio 中)编译该示例时,它完美地工作,因为 NetFwRule 是在 MSVS 提供的 header 中定义的。但是项目使用MinGW g++编译器是绝对必要的。

示例 link 中显示的这个特定代码片段将不起作用,因为 NetFwRule 未定义:

// Create a new Firewall Rule object.
hr = CoCreateInstance(
       __uuidof(NetFwRule), // <- Problem in MinGW g++, but in MSVC it just works
       NULL,
       CLSCTX_INPROC_SERVER,
       __uuidof(INetFwRule),
       (void**)&pFwRule
);

那么需要做什么才能使用 MinGW 完成这项工作?

仅供参考:我安装了带有 posix 线程的 MinGW 32 位 i686 架构。

g++ --version 给出 g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0

错误信息是:'NetFwRule' was not declared in this scope

实际上它并没有声明,因为 MinGW 的 没有声明 NetFwRule。然而,MSVC 确实如此。

好的,我已尝试按照 IInspectable 的建议使用 MinGW 64 位,但这也不起作用 - netfw.h header 仍然不提供 NetFwRule。但是我已经安装了 g++ 和 MSYS2(rustyx 使用的版本),它按预期工作。因此,如果有人遇到同样的问题,我建议将 MinGW 与 MSYS2 一起使用,而不是独立使用。

你的 GCC 太旧了。

您可以通过 MSYS 的 pacman 获取更新版本,或者下载独立版本,例如从 http://winlibs.com/ 下载,如果您不需要 MSYS2,它也可以正常工作。