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