Erstaunlich! Wenn man die folgende Funktion kompiliert erhält man keine Fehlermeldung:
void foo(const LPBYTE data)
{
*data = 0;
}
Man könnte denken, dass diese Funktion identisch wäre zu:
void foo(const BYTE * data)
{
*data = 0; // Compiler Error
}
Ist es aber nicht! Die Funktion
void foo(const LPBYTE data);
ist identisch zu
void foo(BYTE * const data);
und eben nicht zu
void foo(const BYTE * data);
Der typedef darf selbst kein Zeiger sein! Er muss ein Basis Typ sein, nur dann führt const X * zum gewünschten Effekt.
Das ist das eigentliche Problem. Das entspricht auch mit dem Sample im Kapitel 5.4 der Stroustrup „C++ Bibel“.
Siehe auch Diskussion hier:
http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/2568531dcf1c1d7e/215ead7f070e23d0