Marshaling PIDL parameter type shows how you can set use define object type on RMI parameter, which also works with C#. Unfortunately C# doesn't have global function as C++ does. But it allows static member function(method). Due to this, in PIDL C#, there is a class called Nettention.ProudClr.CMarshaler which includes marshaling functions. Nettention.ProudClr.CMarshaler already includes marshaling methods of basic type such as integer, string and etc. Proxy and stub created by PIDL compiler can perform marshaling through static method of ProudClr.CMarshaler.
In order to marshal user-defined type, you need the following steps.
Implementation example can be found at Sample codes of using ProudNet in C#.