Interestingly, according to Microsoft, whenever you use managed code to make calls to COM objects, the interop object is supposed map the types required from managed to unmanaged and vice versa transparently. However, since int is available in both code structures, you don't need to do anything i.e. IntPtr probably isn't required.
Since C# doesn't (or isn't supposed to) return an HRESULT structure, the error isn't being generated from your code, and is instead being generated by the COM type library. So the value you are passing is obviously incorrect.