• Lunes 29 de Abril de 2024, 21:57

Autor Tema:  Problemas Con String^ Y Arraylist  (Leído 1020 veces)

ZiCruz

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Problemas Con String^ Y Arraylist
« en: Lunes 23 de Abril de 2007, 10:48 »
0
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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Con String^ Y Arraylist
« Respuesta #1 en: Lunes 23 de Abril de 2007, 14:15 »
0
NO has inicializado adp:

adp->Nombre = msj;

antes de eso debes hacer la inicializacion de adp cop gcnew
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io