于2011年12月21日 11:22:15,曹朋写到:
> 首先在这里谢谢各位的热情帮助。
> 可能我的问题还有描述清除。
> 但是,从一些朋友的回答当中,已经学到了很多东西。
> 现在的问题:
>
> 嗅探器(抓取数据包)是由libpcap库来实现的,而这个libpcap库是由C实现的。
> 使用C在控制台下完全可以获取一些网络数据包,并分析之。
> 但是,我得需要一个图形界面,故使用了QT来作图形界面。
> 问题,就是出现在了C(也就是libpcap)和QT混合起来;
> 由于在处理网络数据包的时候,使用到了回调函数(已经在上篇邮件当中说明);
> 怎样将这种策略转化为QT当中可使用的方法。
>
>
> 在 2011年12月21日 上午10:49,Leo Ding <leo.din...@gmail.com>写道:
>
>> QT 的信号槽使用也很方便,QWidget编程还是挺简单的,如果用QGraphicsWidget写程序的话那一个郁闷啊,不过动画效果能做的很好
>> ~~~~
>>
>> 在 2011年12月20日 下午8:53,曹朋 <a382...@gmail.com>写道:
>>
>>> 问题描述:
>>> 笔者近日,在做网络嗅探器,其中用到一函数,pcap_loop(pcap_t *,int,pcap_hander callback,u_char
>> *);
>>> callback参数如下:(u_char *,const pcap_pkthdr *,const u_char *);其作用是,来一个数据
>>> 包,调用一次callback,来一次调用一次。
>>> 但,令笔者困惑的是,这个callback并不能被定义成类的成员,一旦定义成类的成员,编译便会报错
>>> argument of type‘void (classname::)(u_char *,const pcap_pkthdr *,const
>>> u_char *) does not match void (*)(u_char *,const pcap_pkthdr *,const
>> u_char
>>> *)’。
>>>
>>>
>> 可是,不定义为成员,就访问不了类的成员。故,笔者换做了友元、static,编译,运行等,均不会有问题。可问题是,我想在callback当中使用类的成员。
>>> callback是用来处理网络数据的。也就是说,我想在callback当中处理了数据之后,在赋值给类的某个成员。然后,显示在界面上。
>>>
>>>
>>> 问题:
>>> 如何在callback当中使用类的成员?或者,这个callback应该一何种方式来定义?在或者,如何通过QT的信号与槽机制来实现?
>>> 或者,有没有一种方案来解决这个问题?
>>> 或者,谁可以提供一个思路?
>>>
>>> 此为:笔者毕设,”基于Linux的网络嗅探器的设计与实现“
>>> 自己当时的实现方案:
>>> 1、使用libpcap首先在consle下实现抓包分析。
>>> 2、学习QT界面。
>>> 3、二者结合。。。就是这二者结合除了大问题了(当时也意识到,会出问题。。。libpcap(也就是C)+QT 混合编程)。
>>> -------------- 下一部分 --------------
>>> 一个HTML附件被移除...
>>> URL: <
>>>
>> https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20111220/24e95459/attachment.html
>>>>
>>> --
>>> ubuntu-zh mailing list
>>> ubuntu-zh@lists.ubuntu.com
>>> https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh
>>>
>> -------------- 下一部分 --------------
>> 一个HTML附件被移除...
>> URL: <
>> https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20111221/339055ae/attachment.html
>>>
>> --
>> ubuntu-zh mailing list
>> ubuntu-zh@lists.ubuntu.com
>> https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh
>>
> -------------- 下一部分 --------------
> 一个HTML附件被移除...
> URL: 
> <https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20111221/b88ee7f0/attachment.html>

public class A
{
public static void Funct(int args)
{
//.....do action
}
}

然后要调用Funct的话,用A.Funct(1)就可以了……

实际上c++的话,似乎没有要求那么严格……你应该是可以直接混用c与c++的。

写在类的外面就好了。

-- 
ubuntu-zh mailing list
ubuntu-zh@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh

回复