调用非托管代码:
dll原型:
typedef struct _DEVICE_LOCATION
  {
  	ULONG DeviceId;			//Device ID
  	ULONG VendorId;			//Vendor ID
  	ULONG SubsystemId;		//Subsystem ID
  	ULONG RevisionId;		//Revision ID
  	CHAR  DeviceCode[16];	//采集卡型号
  } DEVICE_LOCATION, *PDEVICE_LOCATION;
  UINT WINAPI lvGetDeviceInfo(PDEVICE_LOCATION Device, RETURN_CODE *rc);
调用:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
          public struct DeviceLocation
          {
              public ulong DeviceId;
              public ulong VendorId;
              public ulong SubsystemId;
              public ulong RevisionId;
              [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
              public char DeviceCode;
          }  
          //查询PCI采集卡
          [DllImport("lvpci.dll", EntryPoint = "_lvGetDeviceInfo@8", CharSet = CharSet.Auto)]
          public static extern int lvGetDeviceInfo(DeviceLocation dl, ref ReturnCode.returnCode rc);
在我调用lvGetDeviceInfo时,出现这样的错误:
   [
System.TypeLoadException] = {"无法封送处理类型为“DeviceLocation”的字段“DeviceCode”: 无效的托管/非托管类型组合(字符必须与 I1、I2、U1 或 U2 成对出现)。":""}
求高手解答!!
------解决方案--------------------
 public char DeviceCode;
改为
  public char[] DeviceCode;