Это мое определение C ++:
typedef struct _DRIVER_VERSION
{
DWORD DriverNum;
CHAR Version[16][16];
} DRIVER_INFO, *PDRIVER_INFO;
И вот мой код взаимодействия с C #:
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Version16
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]
public string VerInfo;
}
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct _DRIVER_VERSION
{
public System.UInt32 DriverNum;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public Version16 Version16;
}
public static class InstallDeviceClass
{
[DllImport(@"driver.dll")]
public static extern SResultEnum s4drv_GetDriverInfo(ref _DRIVER_VERSION pDrvInfo);
}
static void Main(string[] args)
{
_DRIVER_VERSION version=new _DRIVER_VERSION();
var s4Res = InstallDeviceClass.s4drv_GetDriverInfo(ref version);
}
Однако, когда я запустил код, я получу
$ exception {"Невозможно упорядочить поле 'Version16' типа '_DRIVER_VERSION': недопустимая комбинация управляемого / неуправляемого типа (этот тип значения должен быть связан со Struct).": ""} System.TypeLoadException
Любая причина, почему это происходит, и как это исправить?