Search Issue Tracker

By Design

Votes

0

Found in

2018.1.0f2

Issue ID

1041417

Regression

No

[IL2CPP] In Standalone builds, IL2CPP is reporting that generics are used when there is none of them

IL2CPP

-

To reproduce:

1. Install Steam on your machine, log in to your account and a key to the game that user sent
2. Download attached project "Test.zip" and open in Unity
3. Open "SampleScene" scene
4. Enter Play mode
5. Observe that in Console window there will be printed "5"
6. Exit Play mode
7. Build and Run project on Windows IL2CPP scripting backend with Development Build checked
8. Press Play button
5. Observe that in Standalone console window there will be two errors:

"NotSupportedException: To marshal a managed method, please add an attribute named 'MonoPInvokeCallback' to the method definition.
at Steamworks.NativeMethods.ISteamClient_SetWarningMessageHook (System.IntPtr instancePtr, Steamworks.SteamAPIWarningMessageHook_t pFunction) [0x00000] in <00000000000000000000000000000000>:0
at Steamworks.SteamClient.SetWarningMessageHook (Steamworks.SteamAPIWarningMessageHook_t pFunction) [0x00000] in <00000000000000000000000000000000>:0
at SteamManager.OnEnable () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.GameObject.Internal_AddComponentWithType (System.Type componentType) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.GameObject.AddComponent (System.Type componentType) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.GameObject.AddComponent[T] () [0x00000] in <00000000000000000000000000000000>:0
at SteamManager.get_Instance () [0x00000] in <00000000000000000000000000000000>:0
at SteamManager.get_Initialized () [0x00000] in <00000000000000000000000000000000>:0
at TestScript.Start () [0x00000] in <00000000000000000000000000000000>:0
UnityEngine.GameObject:Internal_AddComponentWithType(Type)
UnityEngine.GameObject:AddComponent(Type)
UnityEngine.GameObject:AddComponent()
SteamManager:get_Instance()
SteamManager:get_Initialized()
TestScript:Start()

(Filename: currently not available on il2cpp Line: -1)"

"NotSupportedException: IL2CPP does not support marshaling delegates that point to generic methods.
at System.Runtime.InteropServices.Marshal.StructureToPtr (System.Object structure, System.IntPtr ptr, System.Boolean fDeleteOld) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.InteropServices.Marshal.StructureToPtr[T] (T structure, System.IntPtr ptr, System.Boolean fDeleteOld) [0x00000] in <00000000000000000000000000000000>:0
at Steamworks.CallResult`1[T].BuildCCallbackBase () [0x00000] in <00000000000000000000000000000000>:0
at Steamworks.CallResult`1[T]..ctor (Steamworks.CallResult`1+APIDispatchDelegate[T] func) [0x00000] in <00000000000000000000000000000000>:0
at LeaderboardManager..cctor () [0x00000] in <00000000000000000000000000000000>:0
at TestScript.Start () [0x00000] in <00000000000000000000000000000000>:0
Rethrow as TypeInitializationException: The type initializer for 'LeaderboardManager' threw an exception.
at TestScript.Start () [0x00000] in <00000000000000000000000000000000>:0

(Filename: currently not available on il2cpp Line: -1)"

Notes:
- On Mono scripting backend everything works fine
- Forum thread: https://forum.unity.com/threads/notsupportedexception-il2cpp-does-not-support-marshaling-delegates-that-point-to-generic-methods.532402
- A key to the game is in Comments section

Reproduced on Unity 2018.1.0f2, 2018.1.2f1, 2018.2.0b6 and 2018.3.0a1

  1. Resolution Note:

    In this case, the offending code is: Steamworks.CallResult<Steamworks.LeaderboardFindResult_t>::OnRunCallResult

    The fact that this works with Mono is probably a bug, as in general, marshaling of generics should not work for a .NET runtime.

    There is some discussion of this issue in the Steamworks.NET issue tracker:

    https://github.com/rlabrecque/Steamworks.NET/issues/227

    It looks like it might be coming to a resolution. Unfortunately, we can't do anything to handle this from the Unity side.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.