希望成为一个有思想,有信仰的程序设计师。
分类: 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
这句引起了我的好奇心,那么在
打开了
#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的帮助手册: