需要调用C++写的DLL,其中有若干结构体,其中一个如下:
typedef unsigned shout uint16;
typedef struct
    {
    OneHead_t tHead ;//共用头信息
    uint16 uErrorCount ;//故障数量
    uint16* puErrorArray ;//故障码数组
    }TimerError_t ;请问那个uint16*该是什么类型啊? 用ref报错啊另外,该dll中有的函数是通过修改参数里的结构体指针内容做返回值的,请问这样的函数是不是在C#里调用时加上ref就可以了?多谢

解决方案 »

  1.   

     [StructLayout(LayoutKind.Sequential)]
    struct TimerError_t
    {
           OneHead_t    tHead ;//共用头信息
            uint16        uErrorCount ;//故障数量
            IntPtr puErrorArray ;//故障码数组
    }
      

  2.   

    MSDN中:
    此枚举与 StructLayoutAttribute 一起使用。默认情况下,公共语言运行库将使用 Auto 布局值。为减少与 Auto 值关联的布局相关问题,C#、Visual Basic 和 C++ 编译器为值类型指定了 Sequential 布局。那是不是表示[StructLayout(LayoutKind.Sequential)] 对值类型(比如结构)而言不是必须的?