Ich heute über eine Unschönheit in einem alten DLL-Code
gestolpert, in dem ein Array nicht komplett auf "hübsch
anzusehende" Werte gesetzt war.
Der Schuldige war schnell ausgemacht:
1 | DLLIMPORT void recvap (int *handle, int *length, int *bytes)
|
2 | {
|
3 | ...
|
4 | memset( (int *)bytes, -1, *length );
|
5 | ...
|
6 | }
|
Das da oben ^^^ funktioniert nicht. Es hat Null Effekt.
Auch nicht nach den üblichen Herumspielereien (*length durch
Konstante ersetzt, andere castings, und und und...)
Das Array beinhaltet vollkommen wirre Werte.
Das hier allerdings:
1 | DLLIMPORT void recvap (int *handle, int *length, int *bytes)
|
2 | {
|
3 | ...
|
4 | for( i=0; i < *length; i++ )
|
5 | *bytes++ = -1;
|
6 | ...
|
7 | }
|
marschiert ab wie ne Eins.
Aber warum?
Was ist so besonders an einer exportierten DLL-Funktion,
die memset() nicht funktionieren läßt?