From 574e0ab1f805e7b04bfaaf4a9654a5e0a1bde70e Mon Sep 17 00:00:00 2001 From: Terence Lee Date: Wed, 13 Mar 2024 17:34:26 +0800 Subject: [PATCH] Imports the IntPtr type to the local module. Sometimes a "foreign member exception" was being created in Cecil when using external libraries. --- .../Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs b/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs index 5cf7bab62..8b4e7e6c9 100644 --- a/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs +++ b/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs @@ -839,10 +839,11 @@ namespace Flax.Build.Plugins module.GetType("System.IntPtr", out var intPtrType); module.GetType("FlaxEngine.Object", out var scriptingObjectType); var fromUnmanagedPtr = scriptingObjectType.Resolve().GetMethod("FromUnmanagedPtr"); + TypeReference intPtr = module.ImportReference(intPtrType); var m = new MethodDefinition(name + "Native", MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig, context.VoidType); - m.Parameters.Add(new ParameterDefinition("instancePtr", ParameterAttributes.None, intPtrType)); - m.Parameters.Add(new ParameterDefinition("streamPtr", ParameterAttributes.None, intPtrType)); + m.Parameters.Add(new ParameterDefinition("instancePtr", ParameterAttributes.None, intPtr)); + m.Parameters.Add(new ParameterDefinition("streamPtr", ParameterAttributes.None, intPtr)); TypeReference networkStream = module.ImportReference(context.NetworkStreamType); ILProcessor il = m.Body.GetILProcessor(); il.Emit(OpCodes.Nop); @@ -1645,12 +1646,13 @@ namespace Flax.Build.Plugins module.GetType("FlaxEngine.Object", out var scriptingObjectType); var fromUnmanagedPtr = scriptingObjectType.Resolve().GetMethod("FromUnmanagedPtr"); TypeReference networkStream = module.ImportReference(networkStreamType); + TypeReference intPtr = module.ImportReference(intPtrType); // Generate static method to execute RPC locally { var m = new MethodDefinition(method.Name + "_Execute", MethodAttributes.Static | MethodAttributes.Assembly | MethodAttributes.HideBySig, voidType); - m.Parameters.Add(new ParameterDefinition("instancePtr", ParameterAttributes.None, intPtrType)); - m.Parameters.Add(new ParameterDefinition("streamPtr", ParameterAttributes.None, module.ImportReference(intPtrType))); + m.Parameters.Add(new ParameterDefinition("instancePtr", ParameterAttributes.None, intPtr)); + m.Parameters.Add(new ParameterDefinition("streamPtr", ParameterAttributes.None, intPtr)); ILProcessor ilp = m.Body.GetILProcessor(); var il = new DotnetIlContext(ilp, method); il.Emit(OpCodes.Nop);