C# 什么是;无效的托管/非托管类型组合。”;什么意思?
我有以下结构:C# 什么是;无效的托管/非托管类型组合。”;什么意思?,c#,.net,struct,marshalling,C#,.net,Struct,Marshalling,我有以下结构: [StructLayout(LayoutKind.Auto,Pack=0)] private unsafe struct BIRDSYSTEMCONFIG { public byte bySystemStatus; public byte byError; public byte byNumDevices; public byte byNumServers; public by
[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;
以及以下功能:
[DllImport(@"Bird.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern bool birdGetSystemConfig(
int nGroupID,
ref BIRDSYSTEMCONFIG psyscfg,
bool bGetDriverCopy
);
BOOL DLLEXPORT birdGetSystemConfig(int nGroupID, BIRDSYSTEMCONFIG *psyscfg, BOOL bGetDriverCopy = FALSE);
基于C++函数:
[DllImport(@"Bird.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern bool birdGetSystemConfig(
int nGroupID,
ref BIRDSYSTEMCONFIG psyscfg,
bool bGetDriverCopy
);
BOOL DLLEXPORT birdGetSystemConfig(int nGroupID, BIRDSYSTEMCONFIG *psyscfg, BOOL bGetDriverCopy = FALSE);
我这样称呼它:
BIRDSYSTEMCONFIG sysconf = new BIRDSYSTEMCONFIG();
birdGetSystemConfig(1, ref sysconf, true);
但是如果你告诉我一个错误:
无法封送“参数#2”:无效
托管/非托管类型组合
这是什么意思?为什么会发生这种情况?我怎样才能克服它?欢迎大家提出建议 我所需要做的就是改变:
[StructLayout(LayoutKind.Auto,Pack=0)]
到
既然这个问题不仅仅是关于如何解决它,我就暂时不谈了。很好地找出更多关于这个错误的信息。< /P>你应该发布原始C++结构。