C#调用Cdll 结构体作参数该怎么传参数

C#调用Cdll 结构体作参数该如何传参数
C Dll函数:
typedef struct Param
{
    char userName[User_NAME_MAX_SIZE];
    char userPass[User_Pass_MAX_SIZE];
}Param;

USER_DLL_EXPORT int User_Login(
            const struct Param *user_param);

请问:C#该如何调用?
------解决思路----------------------
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
class Param
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20 /*User_NAME_MAX_SIZE*/)]
public string userName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40 /*User_Pass_MAX_SIZE*/)]
public string userPass;
};

class Imports
{
[DllImport(dllPath, CallingConvention = CallingConvention.Cdecl)]
public static extern int User_Login(Param user_param);
}

class Program
{
public static int Login(string name, string password)
{
Param p = new Param()
{
userName = name,
userPass = password
};
return Imports.User_Login(p);
}
}

------解决思路----------------------
2楼很完整了。