Problem beim kopieren eines Vektors; wie bekomme ich das Ding typisiert



  • Moin...
    Ich fall mal direkt mit der Tür ins Haus: auf der Suche nach ner Möglichkeit auf CE Geräten z.B. WLan an zu schalten bin ich auf folgendes gestoßen:
    http://www.codeproject.com/KB/windows/RadioPower.aspx?msg=3605684#xx3605684xx
    Soweit sogut, Bluetooth geht - allerdings hab ich n wahrscheinlich triviales Problem beim kopieren eines Vectors:

    DWORD CWifi::QueryOid( HANDLE ndis, const wchar_t* device_name, ULONG oid, std::vector< BYTE >* buffer )
    {
        DWORD bytes_returned = 0;
        std::vector<BYTE> query_theBuffer( sizeof( NDISUIO_QUERY_OID ) + buffer->size() );
        NDISUIO_QUERY_OID* query = 
            reinterpret_cast< NDISUIO_QUERY_OID* >( &query_theBuffer.front() );
        query->Oid = oid;
        query->ptcDeviceName = const_cast< wchar_t* >( device_name );
    
        BOOL res = ::DeviceIoControl( ndis, 
            IOCTL_NDISUIO_QUERY_OID_VALUE,
            reinterpret_cast< LPVOID >( &query_theBuffer.front() ),
            query_theBuffer.size(),
            reinterpret_cast< LPVOID >( &query_theBuffer.front() ),
            query_theBuffer.size(),
            &bytes_returned,
            NULL );
    
        if( res )
        {
            std::copy(query->Data,query_theBuffer.end(), buffer->begin() );
            return ERROR_SUCCESS;
        }
        return GetLastError();
    }
    

    Weiß einer, wie ich den BYTE Vector typisieren muß, dass das copy funktioniert??? Ich bekomm das grad nicht hin - Kompiler schmeisst immer C2782 und erzählt was von Mehrdeutigkeit...
    Ich hab das jetzt über assign gemacht - weiß aber nicht obs gleichwertig ist...



  • Vor allem solltest du die zusammengehörigen Iteratoren verwenden, also query_theBuffer.begin() und query_theBuffer.end().
    Zweitens: Was spricht eigentlich dagegen, den Parameter als Referenz zu übergeben anstelle des Zeigers?
    Drittens: dein query_theBuffer hat mehr Platz reserviert als der buffer, in den du ihn reikopieren willst - das endet in undefined Behaviour.

    PS: assign() oder Zuweisung dürfte für deine Zwecke besser geeignet sein.



  • CStoll schrieb:

    Zweitens: Was spricht eigentlich dagegen, den Parameter als Referenz zu übergeben anstelle des Zeigers?

    Aber was spricht eigentlich dafür?



  • volkard schrieb:

    Aber was spricht eigentlich dafür?

    Die bequemere Art es aufzurufen.



  • Ehrlich gesagt habe ich mir über Sinn- bzw Unsinnigkeit von Pointern/ Referenzen keine Gedanken gemacht.
    Und ja, ich hab auch gesehen, dass die beiden Vectoren unterschiedliche Längen haben - wußte nicht, dass das zu Probs führt...
    Dann bleib ich erstmal bei assign, sofern das beim debuggen gut aussieht und das sonst gleichwertig ist...
    Danke


Anmelden zum Antworten