Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43

    [c++]error C2664: "pcap_loop" all'interno di una classe

    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.
    codice:
    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)
    {}

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    La ProcessPacket deve essere static
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43
    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.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43
    ho dichiarato la funzione ProcessPacket static e adesso funziona.
    nel fare le varie prove non avevo reso la funzione membro della classe

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.