Chinaunix首页 | 论坛 | 博客
  • 博客访问: 563707
  • 博文数量: 50
  • 博客积分: 571
  • 博客等级: 中士
  • 技术积分: 1162
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-20 14:01
个人简介

希望成为一个有思想,有信仰的程序设计师。

文章分类

全部博文(50)

文章存档

2016年(2)

2015年(2)

2014年(13)

2013年(10)

2012年(23)

分类: C/C++

2012-07-16 11:10:34

   今天是第一次接触winpcap,先花费了一些时间在官方网站逛了逛,发现官方文档还是挺给力的,有很多的样例,并且大部分的手册都已经有的了中文版了。帮助手册的地址为:。

本想有了这个详细的帮助手册,就不应该再出现什么问题了,可是事与愿违。

出现的第一个问题:

1.VC++6.0自身的问题,因为在VC++6.0中是不支持/w64这个选项的。winpcap源码中使用了_w64这个关键字,所以在用vc++6.0的时候出现了一大堆的错误。

解决的方法:在定义头文件的前边添加一句:#define _W64

我认为这句话作用与将头文件中的_W64全部删掉的效果是一样的,都是可以解决问题的。

拓展:

关于_W64,这个关键字是不提倡使用的,在不久的将来就会被弃用。官方文档是这样说的:Any typedef that has __w64 on it must be 32 bits on x86 and 64 bits on Itanium Processor Family (IPF).

如果想更近一步了解这个关键字请查阅CSDN:。

2.'pcap_findalldevs_ex' undefined; 'PCAP_SRC_IF_STRING' : undeclared identifier。大家一看就知道一个是函数'pcap_findalldevs_ex'没有定义,还有一个是PCAP_SRC_IF_STRING这个宏变量没有定义。

问题分析:

这个问题很奇怪,因为我的测试程序是从官方手册上复制的。理论上讲不应该出现这样的问题,分析出现这个问题可能的原因:

a.头文件这个头文件没有正确包含。

b.上面出错的这两个地方就没有在中定义。

解决方法:

要想验证上面的猜想,本应该是去看看源码,我这里我就偷了个懒直接百度了一下,果然有人遇到过类似的问题,说是在中就没有上面两个的定义,定义他们的头文件是

我就按照网上的说法在源文件中添加了#include

但是新的问题出现了:#error Please do not include this file directly. Just define HAVE_REMOTE and then include pcap.h

这句引起了我的好奇心,那么在中应该是根据是否宏定义HAVE_REMOTE,然后确定是否包含

打开了这个头文件,果然不出所料,同时发现如果宏定义了HAVE_REMOTE ,在这个头文件中还会定义很多变量。所以我们在处理上面出现的错误的时候不能直接在remote-ext.h中将

#ifndef HAVE_REMOTE
#error Please do not include this file directly. Just define HAVE_REMOTE and then include pcap.h
#endif

这段话删去,而是应该在源代码中添加宏定义:#define HAVE_REMOTE

注意:这句话一定要添加在#include 的声明之前,而且也不用包含

小结:对于问题1的解决方法就是直接在源文件中添加: #define _W64

对于问题2的解决方法就是在源文件中添加: #define HAVE_REMOTE

说明:这里源文件是你自己编写的那个文件,不是这个winpcap的源文件。

//看来上面的问题解决起来还是挺容易的。

参考文献:

微软CSDN:

winpcap的帮助手册:

阅读(7014) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~