有一个工具叫CLRInsideOut,用它可以将C++转换成对应的C#类型。

解决方案 »

  1.   

    u_int8_t version[4]; 改成 char 
     public byte[] version; 改成string
    试试。有可能是定义的类型不对引起的。
      

  2.   

    试试,因为C#默认是WINAPI[DllImport("clib.dll",CallingConvention=CallingConvention.Cdecl)]
      

  3.   

    试试在你的c#结构体加上:[StructLayout(LayoutKind.Sequential)]调用改成:[DllImport("clib.dll", EntryPoint = "cl_init", CharSet = CharSet.Ansi)]还有不知道你的u_int8_t是否是:typedef unsigned char u_int8_t;
      

  4.   

    使用bigbaldy  的方法问题解决,附上CallingConvention枚举说明,
    http://msdn.microsoft.com/zh-cn/beginner/system.runtime.interopservices.callingconvention(VS.90).aspx 
    可能是因为cdecl方式是C/C++编译器默认的函数调用约定造成的,希望对后来人有用,结贴。