粗略看了下,有两点需要注意
1.结构体要考虑字节对齐问题,
给你个例子 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct SBaseConfig
{
public int LogFileCount;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string LogFilePath;
}2. 结构体指针在Dllimport声明时,需要加上 MarshalAs属性
例如:
[In, Out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStruct, SizeParamIndex = 1)] MyStruct[] dataArray
1.结构体要考虑字节对齐问题,
给你个例子 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct SBaseConfig
{
public int LogFileCount;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string LogFilePath;
}2. 结构体指针在Dllimport声明时,需要加上 MarshalAs属性
例如:
[In, Out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStruct, SizeParamIndex = 1)] MyStruct[] dataArray
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]