“无效的托管/非托管类型组合”是什么意思?

我有以下结构:

[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]; } 

基于C ++结构:

 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; 

以下function:

  [DllImport(@"Bird.dll", CallingConvention = CallingConvention.Cdecl)] private static extern bool birdGetSystemConfig( int nGroupID, ref BIRDSYSTEMCONFIG psyscfg, bool bGetDriverCopy ); 

基于C ++函数:

 BOOL DLLEXPORT birdGetSystemConfig(int nGroupID, BIRDSYSTEMCONFIG *psyscfg, BOOL bGetDriverCopy = FALSE); 

我称之为:

 BIRDSYSTEMCONFIG sysconf = new BIRDSYSTEMCONFIG(); birdGetSystemConfig(1, ref sysconf, true); 

但是告诉我一个错误:

无法封送’参数#2’:无效的托管/非托管类型组合。

那是什么意思? 它为什么会发生? 我怎么能克服它? 欢迎所有建议!

事实certificate我需要做的就是改变:

 [StructLayout(LayoutKind.Auto,Pack=0)] 

 [StructLayout(LayoutKind.Sequential,Pack=0)] 

既然问题不仅仅是如何解决它,我还会暂时搁置一下。 很高兴找到关于这个错误的更多信息。