Как вызвать функцию из делегата и указателя на функцию внутри - PullRequest
0 голосов
/ 01 мая 2019

У меня есть код ниже, вызывающий функцию с делегатом и функцию внутри делегата.Но система выдает исключение «Cannot marshal« return value »: недопустимая комбинация управляемого / неуправляемого типа».в Marshal.GetDelegateForFunctionPointer, кто-нибудь может помочь, как решить это?

namespace hello
{ 
    class test
    { 
        public delegate IPAddress[] DnsFuncDelegate(string message);
        public DnsFuncDelegate dns = null;

        static void Main(string[] args)
        {
            BindingFlags anyType = BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            string filePath1 = "I:\\psnet\\System.dll";
            Assembly systemAssembly1 = Assembly.LoadFile(filePath1);
            Type targetMethodClass1 = systemAssembly1.GetType("System.Net.Dns");
            var targetMethodType = new Type[] { typeof(String), };
            MethodInfo target1 = targetMethodClass1.GetMethod("GetHostAddresses", anyType, null, targetMethodType, null);
            RuntimeHelpers.PrepareMethod(target1.MethodHandle);
            IntPtr target1Addr = target1.MethodHandle.GetFunctionPointer();

            DnsFuncDelegate dns = (DnsFuncDelegate)Marshal.GetDelegateForFunctionPointer(target1Addr, typeof(DnsFuncDelegate));

            IPAddress[] addresses2 = dns("localhost");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...