[Mono-list] Deep Marshaling

Giuseppe Greco giuseppe.greco at agamura.com
Mon Oct 24 02:33:00 EDT 2005


Jon,

sorry, there was just a typing error... here's the right code:

...

public unsafe void FillMyStruct(string s)
{
      //
      // convert the given string into a byte array
      //
      byte[] data = Encoding.UTF8.GetBytes(s);

      //
      // create another byte array for storing
      // a new instance of MyStruct
      //
      byte[] buffer = new byte[
          sizeof(int)    // Size of MyStruct.Id
        + data.Length];  // Length of MyStruct.Data

      //
      // fill the buffer
      //
      fixed (byte* pBuffer = buffer, pData data) {
          MyStruct* pMyStruct = (MyStruct*) pBuffer;
          pMyStruct->Id = 100;
          pMyStruct->Data = pBuffer + sizeof(int); // here should be
                                                   // pBuffer instead
                                                   // of pData!!!
          UnsafeCopy(
              pData, 0,               // source buffer
              pMyStruct->Data, 0,     // destination buffer
                                      //   this points now to
                                      //   pBuffer + 4
              data.Length);           // number of bytes to copy
      }
}

In the code above there is no overlapping and it works fine
(I've tried it).

j3d.

>
>
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>


----------------------------------------
Giuseppe Greco
::agamura::

call giuseppe.greco via Skype
phone:  +41 (0)91 604 67 65
mobile: +41 (0)79 590 33 06
email:  giuseppe.greco at agamura.com
web:    www.agamura.com
----------------------------------------


More information about the Mono-list mailing list