PDA

Visualizza la versione completa : [c++]error C2664: "pcap_loop" all'interno di una classe


dario09
30-03-2013, 23:34
ciao,uso visual c++ 2003.
vorrei creare una classe con all'interno la funzione (ProcessPacket)che legge i pacchetti catturati da pcap_loop
pero' mi da questo errore
error C2664: "pcap_loop": impossibile convertire il parametro 3 da "void (u_char *,const pcap_pkthdr *,const u_char *)" a "pcap_handler"
grazie.


class sniff
{
public:
const struct pcap_pkthdr *hdr;
const u_char *buffer;
//prototipi funzioni
void Inizia_Loop(void);
void ProcessPacket(u_char *,const struct pcap_pkthdr *,const u_char *);
};

void sniff::Inizia_Loop(void)
{
pcap_loop(handle,MAX_P,ProcessPacket,NULL);
}
void sniff::ProcessPacket(u_char *args,const struct pcap_pkthdr *hdr,const u_char *buffer)
{}

oregon
31-03-2013, 00:27
La ProcessPacket deve essere static

dario09
01-04-2013, 15:20
grazie per la risposta.
rendendo static la funzione -ProcessPacket-
ricevo questo errore dal linker

miaWinCap error LNK2019: riferimento al simbolo esterno "public: static void __cdecl sniff::ProcessPacket(unsigned char *,struct pcap_pkthdr const *,unsigned char const *)" (?ProcessPacket@sniff@@SAXPAEPBUpcap_pkthdr@@PBE@Z ) non risolto nella funzione "public: void __thiscall sniff::Inizia_Loop(void)" (?Inizia_Loop@sniff@@QAEXXZ)

devo usare extern "C" ?

nel frattempo ho apportato le seguenti modifiche e adesso non mi da piu errori
ho modificato la funzione -void Inizia_Loop(void); - in static
ho modificato la funzione -void ProcessPacket(u_char *,const struct pcap_pkthdr *,const u_char *); - in friend

le due soluzioni sono uguali o ci sono delle differenze?
grazie.

dario09
05-04-2013, 20:43
ho dichiarato la funzione ProcessPacket static e adesso funziona.
nel fare le varie prove non avevo reso la funzione membro della classe

Loading