That is why I do not really like using marshalling, because I don't get how it works...
Code:
Marshal::PtrToStringAnsi((IntPtr)(tmp));
That works, the line you wrote throws an error.
Let me check if it crashes real quick...
EDIT: Still crashed...