这是我的C++定义:
typedef struct _DRIVER_VERSION
{
DWORD DriverNum;
CHAR Version[16][16];
} DRIVER_INFO, *PDRIVER_INFO;
THSI是我的C interop代码:
[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”:无效的托管/非托管类型组合(此
值类型必须与结构成对出现)。“:”“System.TypeLoadException
为什么会发生这种情况,以及如何解决这种情况?