读书人

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

发布时间: 2012-11-07 09:56:10 作者: rapoo

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

读书人网 >C#

热点推荐