2011-04-15 75 views
4

我有以下結構:什麼是「託管/非託管類型組合無效」。意思?

[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 
     ); 

基於C++函數:

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

我稱之爲是這樣的:

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

但得到一個錯誤,告訴我:

不能元帥參數#2「:無效 管理/非託管類型組合。

這是什麼意思?爲什麼會發生?我如何克服它?歡迎所有建議!

+0

您應該發佈原始的C++結構。 – 2011-04-15 02:06:09

+0

好主意。編輯。 – 2011-04-15 02:10:10

+0

看看這裏:http://www.groupsrv.com/dotnet/about24649.html – sajoshi 2011-04-15 02:38:41

回答

2

打開了所有我需要做的是改變:

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

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

由於問題是關於不僅僅是如何解決這個問題,我會離開它打開一個更而。很高興能夠找出更多關於這個錯誤的信息。

相關問題