如何使用out参数编译函数到本机代码?

时间:2012-10-22 09:05:47

标签: c#

我有委托声明为:

        internal delegate bool readDelegate(out byte data);

在某些时候,我想获得一个指向委托实例的函数指针:

        readDelegate reader = (out byte data) => 
            {
                Console.WriteLine("Managed output! opening");
                if (stream.CanRead)
                {
                    data = (byte)stream.ReadByte();
                    return true;
                }
                else
                {
                    data = 0;
                    return false;
                }
            };

如果能够从流中读取单个字节。

但是当我尝试获取一个函数指针时,就像这样:

IntPtr foo = Marshal.GetFunctionPointerForDelegate(reader);

我得到一个例外:

System.NotSupportedException was unhandled
  Message="0x80131515"
  StackTrace:
    в System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(Delegate d)
...

是什么原因?我该如何更改我的代码?

1 个答案:

答案 0 :(得分:0)

异常消息的其余部分是什么?应该有错误的解释。

无论如何,我认为这可能有用:

internal unsafe delegate bool readDelegate(byte* data);