msdn2003
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconmarshalingdatawithplatforminvoke.htm
msdn2005
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxinterop/html/dc5c76cf-7b12-406f-b79c-d1a023ec245d.htm
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconmarshalingdatawithplatforminvoke.htm
msdn2005
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxinterop/html/dc5c76cf-7b12-406f-b79c-d1a023ec245d.htm
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8)]
char[] 用string
[DllImport("processor.dll", EntryPoint = "getProdInfo", CallingConvention = CallingConvention.StdCall)]
unsafe public static extern void* getProdInfo(); unsafe public void* config;
下面事件:
config=getProdInfo();
CONFIGINFO* sy = (CONFIGINFO*)config;
运行出错!
无法获取托管类型(“radarprocessor.Form1.CONFIGINFO”)的地址和大小,或无法声明指向它的指针
public struct RGBCOLOR
{
public byte rgbRed;
public byte rgbGreen;
public byte rgbBlue;
public byte rgbReserved;
};
[StructLayout(LayoutKind.Sequential)]
public struct PRODPARAM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public byte name;
//public string name;如果这里用string 通不过
public float value;
};
[StructLayout(LayoutKind.Sequential)]
public struct CONFIGINFO
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
//public string m_Product;-------如果这里用string 通不过
public byte m_Product;//----------public byte[] m_Product也会出错.
public long m_ID;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=100)]
public RGBCOLOR m_Color;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public float m_Value;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public PRODPARAM m_Param;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public byte m_ProcMod;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public byte m_Unit;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst =140)]
public byte Reserved;
};
高手请指点.