Jetzt hast du mich so früh am morgen erwischt.
Wenn es um's Marshaling geht, kann man char arrays prima als string behandeln.

Dem Marshaler sagst du einfach wie er es umfriemeln soll und gut ist:
Code:
using System;
using System.Runtime.InteropServices;
struct RASConnection
{
public int dwSize;
public IntPtr hRasCon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=21)]
public string szEntryName;
}