c++ dll 原型:
struct myStruct
{
   byte* mymember;
}int myfunc(myStruct* theStruct);c#中调用此dll中的myfunc(),该如何在c#下定义结构体myStruct?unsafe下可以通过同样的定义指针解决,但是非unsafe下怎么搞定?

解决方案 »

  1.   

    struct myStruct
    {
       byte mymember[];
    }
      

  2.   

    ms 我这样做时总是写内存错误(已经 new byte[]情况下)
      

  3.   

    public struct myStruct
    {
    [MarshalAs(UnmanagedType.ByValArray , SizeConst = 1)]
      

  4.   

    如下定义,可就是报内存读写错误
    public struct myStruct
    {
       [MarshalAs(UnmanagedType.ByValArray , SizeConst = 1)]
       public byte[] mymemeber;   public myStruct(int i)
      {
          mymemeber = new byte[1];
      }
      

  5.   

    struct myStruct
    {
       byte[] mymember;
    }
    使用时
    myStruct m = new myStruct();
    m.mymember = new byte[255];m.mymember = ...GetBytes 
      

  6.   

    在c#下使用myStruct是没有问题,但是传递给dll(c++封装)时,报内存读写错误,是不是c#下struct.member[]和c++下struct.*member没有建立关系,或者说传递地址时错误呢?
      

  7.   

    我感觉是.net下操作不是实际内存地址,跟C++不一样.引用动态dll经常有这个问题,有时总是勉强写对了,参数和其他数据结构的转换总是不太清楚.期待有高手好好解释一下这方面知识