Die Parameter sind nicht gleich. Bei der Decode Funktion ist der Hash ein UCHAR und kein PUCHAR
Bei dem ganzen CopyAndSkipString Kram hast du btw. auf jeden Fall einen Buffer Overflow eingebaut. Der Speicher, den du dir per GetMem holst ist unter 32 Bit immer 8 Byte groß. In der Funktion schreibst du aber im Falle von "TestString" 22 Bytes.