Hola a tod@s, en este código
public ref class Adaptador {
public:
...
property String^ Nombre;
...
}
________________________________________
Sniffer::Sniffer(void) {
int i = 0;
String^ msj;
pcap_if_t *tRed;
pcap_if_t *tarjetasRed;
char errBuffer[PCAP_ERRBUF_SIZE];
Adaptador^ adp;
// Obtenemos la lista de tarjetas de red de ordenador donde se ejecute.
int OK = pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &tarjetasRed, errBuffer);
if (OK == -1) {
msj = String::Concat("Error en pcap_findalldevs_ex:", gcnew String(errBuffer));
MessageBox::Show(msj, "Error en WinPcap", MessageBoxButtons::oK, MessageBoxIcon::Error);
//fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errBuffer);
}
for(tRed = tarjetasRed; tRed != NULL; tRed = tRed->next) {
msj = gcnew String(tRed->name);
adp->Nombre = msj; if (tRed->description)
adp->Descripcion = gcnew String(tRed->description); else
adp->Descripcion = "Sin descripcion";
// Object^ obj = safe_cast<Object^>(adp);
Adaptadores.Add(adp);
//MessageBox::Show(msj, "Adptador de red", MessageBoxButtons::oK, MessageBoxIcon::Error);
i++;
}
// Se libera la lista de tarjetas de red obtenida anteriormente.
pcap_freealldevs(tarjetasRed);
} // FIN Sniffer(void)
en las sentencias subrayadas me da el siguiente error de ejecución:
"Excepción no controlada del tipo 'System.NullReferenceException' en Pruebas.exe"
Información adicional:Referencia a objeto no establecido como instacia del objeto"¿¿¿¿¿como puedo revolverlo?????Si cambio el código anterior por este otro (En cursiva están los cambios):
Sniffer::Sniffer(void) {
int i = 0;
String^ msj;
pcap_if_t *tRed;
pcap_if_t *tarjetasRed;
char errBuffer[PCAP_ERRBUF_SIZE];
Adaptador adp; // Obtenemos la lista de tarjetas de red de ordenador donde se ejecute.
int OK = pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &tarjetasRed, errBuffer);
if (OK == -1) {
msj = String::Concat("Error en pcap_findalldevs_ex:", gcnew String(errBuffer));
MessageBox::Show(msj, "Error en WinPcap", MessageBoxButtons::oK, MessageBoxIcon::Error);
//fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errBuffer);
}
for(tRed = tarjetasRed; tRed != NULL; tRed = tRed->next) {
msj = gcnew String(tRed->name);
adp.Nombre = msj; if (tRed->description)
adp.Descripcion = gcnew String(tRed->description); else
adp.Descripcion = "Sin descripcion";// Object^ obj = safe_cast<Object^>(adp);
Adaptadores.Add(adp); //MessageBox::Show(msj, "Adptador de red", MessageBoxButtons::oK, MessageBoxIcon::Error);
i++;
}
// Se libera la lista de tarjetas de red obtenida anteriormente.
pcap_freealldevs(tarjetasRed);
} // FIN Sniffer(void)
en la sentencia subyadada me da el siguiente error:
error C2664: 'System::Collections::ArrayList::Add' : no se puede convertir el parámetro 1 de 'Adaptador' a 'System::Object ^'
¿¿¿¿¿como puedo revolverlo?????Muchas gracias.