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

解决方案 »

  1.   

    char 就用 char可以
    [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8)]
    char[] 用string
      

  2.   

    用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”)的地址和大小,或无法声明指向它的指针
      

  3.   

    [StructLayout(LayoutKind.Sequential)]
            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;
            };
    高手请指点.