react-native/ReactCommon
Eric Rozell dd5798b57b Workaround for P/Invoke AccessViolationException
Summary:
The issue is on ARM builds for Windows UWP. For the C# P/Invoke API wrapper, any native method that returns the YogaValue struct throws the AccessViolationException. The issue is not with structs in general, as returning the YogaSize / YGSize struct works fine. The issue seems to be limited to structs that have an enum member.

I tried a number of things to resolve the issue without changing the underlying native API for Windows. I read the ARM documentation and saw reference to variable enum sizes based on the number of enum members, so I tried to use a number of different UnmanagedType values in a [MarsalAs()] attribute on the enum member of the C# struct declaration.

What ultimately worked was to return a pointer to the location of the struct, and use the System.Runtime.InteropServices.PtrToStructure API to read the struct data from that pointer. I added a few new macros that will return the struct address on Windows only, other builds are not affected.

Note, I have not tested the impact of this ch
Closes https://github.com/facebook/yoga/pull/459

Reviewed By: emilsjolander

Differential Revision: D4652278

Pulled By: splhack

fbshipit-source-id: bf7ada4da1781e3f813b3ba331974b7bded476d9
2017-03-06 11:33:02 -08:00
..
cxxreact Tweak CxxMessageQueue to work with unique_ptr 2017-02-28 14:15:56 -08:00
inspector Apply auto-formatter for BUCK files in fbandroid. 2017-02-27 14:04:56 -08:00
jschelpers Apply auto-formatter for BUCK files in fbandroid. 2017-02-27 14:04:56 -08:00
microprofiler Apply auto-formatter for BUCK files in fbandroid. 2017-02-27 14:04:56 -08:00
yoga Workaround for P/Invoke AccessViolationException 2017-03-06 11:33:02 -08:00