c++结构体的声明
typedef struct _PREAMP_STAT
{
BYTE Freqency; //
BYTE FPGAvsn1; //
BYTE FPGAvsn2; //
BYTE CPUvsn1; //
BYTE CPUvsn2; //
BYTE Hardwarevsn1; //
BYTE Hardwarevsn2; //
BYTE SerialNum[6]; /
BYTE CellVotage[2]; //
BYTE CellState; //BYTE MaxConfig; //
BYTE ChoiceState[9];//BYTE Reserves[38]; //
} PREAMP_STAT,*PPREAMP_STAT;//sizeof(PREAMP_STAT) = 64
c++中的引用:
ReadAmpInfo(PPREAMP_STAT pPreAMPStat);
我在c#中定义的结构:
[StructLayout(LayoutKind.Sequential)]
public struct PPREAMP_STAT
{
[MarshalAs(UnmanagedType.U1)]
public Byte Freqency; //
[MarshalAs(UnmanagedType.U1)]
public Byte FPGAvsn1; //
[MarshalAs(UnmanagedType.U1)]
public Byte FPGAvsn2; //
[MarshalAs(UnmanagedType.U1)]
public Byte CPUvsn1; //[MarshalAs(UnmanagedType.U1)]
public Byte CPUvsn2; //
[MarshalAs(UnmanagedType.U1)]
public Byte Hardwarevsn1; //
[MarshalAs(UnmanagedType.U1)]
public Byte Hardwarevsn2; //
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public Byte[] SerialNum; //
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public Byte[] CellVotage; //
[MarshalAs(UnmanagedType.U1)]
public Byte CellState; //
[MarshalAs(UnmanagedType.U1)]
public Byte MaxConfig; //
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)]
public Byte[] ChoiceState;//
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 38)]
public Byte[] Reserves; //
} //sizeof(PREAMP_STAT) = 64
导入dll的语句:
[DllImport(@"lib\HardUsb.dll")] public static extern bool ReadAmpInfo( PPREAMP_STAT pPreAMPStat);//
在c#中的引用:
PPREAMP_STAT myPPREAMP_STAT = new PPREAMP_STAT();
bool aa= ReadAmpInfo(myPPREAMP_STAT);//就是这句错误
出现的错误是:对 PInvoke 函数“xxxx!xxxxx.mainform::ReadAmpInfo”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
请大侠们务必指教!我好郁闷!
智慧大石
HUWWW
慕的地6264312