what is the purpose of pStr?  just pass a string into MyTest? if yes, use String for pStr. If it changes its value inside MyTest, use StringBuilder
[StructLayout(LayoutKind.Sequential)]
public class TESTSTRUCT
{
 public int a;
[MarshalAs(UnmanagedType.LPStr)]
 public string pStr; //or StringBuilder pStr;
}[DllImport("YourDLLName.dll")]
public static extern void MyTest(
[MarshalAs(UnmanagedType.LPStruct),Out]
TESTSTRUCT pt);or[DllImport("YourDLLName.dll")]
public static extern void MyTest(
[MarshalAs(UnmanagedType.LPStruct)]
TESTSTRUCT pt);