编译时出现C ++错误

时间:2010-11-08 04:52:24

标签: c++ linker

我正在开发一个适用于Windows XP的防火墙应用程序。

为了实现这一点,我正在创建一个dll文件,可以在C#文件中使用。

对于Vista或更高版本,我使用了this code,但它没有编译。我赢得了sdk 2008,它显示了这个错误:

  

错误19错误LNK2019:未解析的外部符号_FwpmEngineOpen0 @ 20在函数“private:unsigned long __thiscall PacketFilter :: CreateDeleteInterface(bool)”中引用(?CreateDeleteInterface @ PacketFilter @@ AAEK_N @ Z)PacketFilter.obj FirewallVista“。

必须是一些项目属性设置问题,因为我知道所有的lib文件都是正确导入的。

2 个答案:

答案 0 :(得分:4)

您似乎正在尝试从codeproject编译简单的WFP项目。上面的人可能不理解问题,但答案是:

  • 找到第一个函数链接器失败,并在MSDN上找到它,例如。 FwpmEngineOpen0并找到需要链接到哪个库并将其添加到项目属性/链接器/输入/附加依赖项
  • 实际上,在示例中,还有另一个功能无法链接UuidCreate

长话短说:

  1. 创建一个简单的Win32控制台应用程序(我使用VS2012完成)并构建它 - 确保它正常工作
  2. 将头文件添加到项目(PacketFilter.h)到项目
  3. 用(PacketFilter.cpp)内容替换主源文件,但不要删除文件顶部“stdafx.h”的include
  4. 将以下库添加到链接器部分(如上所述)
  5. Fwpuclnt.lib Rpcrt4.lib

    构建并运行应用程序(您可能还需要将字符集更改为多字节)。

    您必须修改源中的IP地址才能使示例正常工作。我选择了一个本地IP地址并做了

      

    ping -n 100 192.168.100.200

    请参阅ping返回,启动exe,并看到ping无法到达目的地(超时) - 例如。防火墙正在工作。然后按任意键以停止防火墙并再次看到ping到达目的地。

    我会发布指向codeproject页面的链接,但由于我的信用额度不到10,所以我不能:-P

    谷歌:“使用Vista的Windows过滤平台API的防火墙”

    希望这有助于任何试图构建此示例的人。

答案 1 :(得分:2)

您缺少图书馆参考。检查您是否已导入代码所期望的.lib。

编辑:缺少的导入来自您正在谈论的库。这可能表示您忘记导入该实际库的.lib,或者您需要将该项目中的.cpp文件附加到您自己的项目中。换句话说,您需要的不仅仅是标题。

此外,如果您使用的是.NET,请考虑使用普通Vista Firewall API,因为它已经作为COM coclass公开,.NET可以与本地进行通信。