首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

调用非托管代码:解决方法

2012-11-07 
调用非托管代码:dll原型:typedef struct _DEVICE_LOCATION{ULONG DeviceId//Device IDULONG VendorId//V

调用非托管代码:
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;

热点排行