-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Labels
Description
OS: Windows 10 x64, Ubuntu 16.04 x64
Framework: NetCoreApp 2.0, Net Framework 4.6
Given code:
using System;
using System.Runtime.InteropServices;
namespace MarshalDelegateError
{
public class Test1
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate IntPtr MyDelegateOne(IntPtr a, IntPtr b, IntPtr c);
}
public class Test2
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate IntPtr MyDelegateTwo(IntPtr a, IntPtr b, IntPtr c);
}
class Program
{
private static IntPtr MyTestFunc(IntPtr a, IntPtr b, IntPtr c)
{
return a;
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
IntPtr ptr = Marshal.GetFunctionPointerForDelegate((Test1.MyDelegateOne)MyTestFunc);
var d1 =(Test1.MyDelegateOne) Marshal.GetDelegateForFunctionPointer(ptr, typeof(Test1.MyDelegateOne));
var d2 = (Test2.MyDelegateTwo)Marshal.GetDelegateForFunctionPointer(ptr, typeof(Test2.MyDelegateTwo));
Console.WriteLine("Bug was not reproduced!");
}
}
}But should works fine.
This problem forces developer to manually maintain strong one to one relationship between marshaling delegate name and marshaling delegate signature.
