Pinning a managed structure

  • Thread starter Thread starter Ulrich Sprick
  • Start date Start date
U

Ulrich Sprick

Hi all,

is there a simple possibility to pin down a C# class member (a structure) so
that I can use it in an unmanaged DLL?
I only found the C# fixed() statement, but the structure is used throughout
the whole application lifetime, so fixed() does not seem to be the method of
choice...

Any ideas?

Thanks in advance,
ulrich
 
I believe you have to grab a GC handle for the object and pass the
constructor an enum saying that you want it to be pinned. From an example I
snagged:

GCHandle dontMoveMe = GCHandle.Alloc( thePinnedObject, GCHandleType.Pinned );
 
Ulrich,
I only found the C# fixed() statement, but the structure is used throughout
the whole application lifetime, so fixed() does not seem to be the method of
choice...

Then pinning isn't the right choice at all, it's only meant for short
periods of time. Have you considered allocating and sharing an
unmanaged memory buffer between your managed and native code? On the
C# side you can read and write a struct to/from that buffer.


Mattias
 
Back
Top