title: What does "Invalid managed/unmanaged type combination." mean?
body: <p>I have the following struct:</p>
  
  <pre><code>    [StructLayout(LayoutKind.Auto,Pack=0)]
      private unsafe struct BIRDSYSTEMCONFIG
      {
          public byte bySystemStatus;
          public byte byError;
          public byte byNumDevices;
          public byte byNumServers;
          public byte byXmtrNum;
          public ushort wXtalSpeed;
          public double dMeasurementRate;
          public byte byChassisNum;
          public byte byNumChassisDevices;
          public byte byFirstDeviceNum;
          public ushort wSoftwareRev;
          public fixed byte byFlockStatus[127];
      }
  </code></pre>
  
  <p>Based on the C++ struct:</p>
  
  <pre><code>typedef struct tagBIRDSYSTEMCONFIG
  {
      BYTE    bySystemStatus;     // current system status (see bird system status bits, above)
      BYTE    byError;            // error code flagged by server or master bird
      BYTE    byNumDevices;       // number of devices in system
      BYTE    byNumServers;       // number of servers in system
      BYTE    byXmtrNum;          // transmitter number (see transmitter number bits, above)
      WORD    wXtalSpeed;         // crystal speed in MHz
      double  dMeasurementRate;   // measurement rate in frames per second
      BYTE    byChassisNum;       // chassis number
      BYTE    byNumChassisDevices; // number of devices within this chassis
      BYTE    byFirstDeviceNum;   // number of first device in this chassis
      WORD    wSoftwareRev;       // software revision of server application or master bird
      BYTE    byFlockStatus[BIRD_MAX_DEVICE_NUM + 1]; // status of all devices in flock, indexed by bird number (see note in BIRDFRAME definition) - see bird flock status bits, above
  } 
  BIRDSYSTEMCONFIG;
  </code></pre>
  
  <p>And the following function:</p>
  
  <pre><code>    [DllImport(@"Bird.dll", CallingConvention = CallingConvention.Cdecl)]
      private static extern bool birdGetSystemConfig(
          int nGroupID,
          ref BIRDSYSTEMCONFIG psyscfg,
          bool bGetDriverCopy
          );
  </code></pre>
  
  <p>Based on the C++ function:</p>
  
  <pre><code>BOOL DLLEXPORT birdGetSystemConfig(int nGroupID, BIRDSYSTEMCONFIG *psyscfg, BOOL bGetDriverCopy = FALSE);
  </code></pre>
  
  <p>Which I call like this:</p>
  
  <pre><code>BIRDSYSTEMCONFIG sysconf = new BIRDSYSTEMCONFIG();
  birdGetSystemConfig(1, ref sysconf, true);
  </code></pre>
  
  <p>But get an error telling me:</p>
  
  <blockquote>
    <p>Cannot marshal 'parameter #2': Invalid
    managed/unmanaged type combination.</p>
  </blockquote>
  
  <p>What does that mean? Why does it occur? How can I overcome it? All suggestions welcome!</p>