DLLs und memset()

Gast #3018886
Lesenswert?

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?
Gast #3018934
Lesenswert?

Peter II schrieb:
>
> Oder hast du eine lib gelinkt wo eine andere memset version drin ist?
>

"Ich hab nix gemacht" (TM)

Ich muß allerdings zugeben, daß mein momentan benutzter Compiler
nun nicht gerade DAS Standardwerk für Win32 ist:

  gcc (GCC) 3.4.2 (mingw-special)
  aus Dev-C++ 4.9.9.2

Wenn Du so sicher bist, daß das funktionieren müßte,
werde ich das Ganze vielleicht doch aus Spaß mal durch ne
andere Toolchain jagen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren