How to marshal int* in C#?
        Posted  
        
            by MartyIX
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by MartyIX
        
        
        
        Published on 2010-04-28T20:38:56Z
        Indexed on 
            2010/04/29
            0:17 UTC
        
        
        Read the original article
        Hit count: 999
        
Hi,
I would like to call this method in unmanaged library:
void __stdcall GetConstraints(
  unsigned int* puiMaxWidth,
  unsigned int* puiMaxHeight,
  unsigned int* puiMaxBoxes
);
My solution:
- Delegate definition: - [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void GetConstraintsDel(UIntPtr puiMaxWidth, UIntPtr puiMaxHeight, UIntPtr puiMaxBoxes); 
- The call of the method: - // PLUGIN NAME GetConstraintsDel getConstraints = (GetConstraintsDel)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall, typeof(GetConstraintsDel)); uint maxWidth, maxHeight, maxBoxes; unsafe { UIntPtr a = new UIntPtr(&maxWidth); UIntPtr b = new UIntPtr(&maxHeight); UIntPtr c = new UIntPtr(&maxBoxes); getConstraints(a, b, c); }
It works but I have to allow "unsafe" flag. Is there a solution without unsafe code? Or is this solution ok? I don't quite understand the implications of setting the project with unsafe flag.
Thanks for help!
© Stack Overflow or respective owner