使用托管C ++中的函数指针调用C#委托

时间:2012-10-06 09:14:23

标签: c# c++ .net windows managed

Program.cs的

class Program
    {
        public static void He(string v)
        {
                Console.WriteLine(v);
                Console.WriteLine("End?");
            }
        public delegate void he(string v);

        static void Main(string[] args)
        {
            Class1 cls = new Class1();
            IntPtr p = Marshal.GetFunctionPointerForDelegate(new he(He));
            cls.call(p, "String");
        }
    }

TestClassLibrary.h

namespace TestClassLibrary 
{
    typedef void (Hello)(System::String ^ v);

    public ref class Class1
    {
        public:
        void call(IntPtr p,System::String ^v);
    };
}

TestClassLibrary.cpp

namespace TestClassLibrary 
{
    void Class1::call(IntPtr p,System::String ^ v)
    {
        Hello * h = (Hello *)p.ToPointer();
        h(v);
    }
}

我不知道这段代码有什么问题:(

(测试类库被编译为托管DLL。)

1 个答案:

答案 0 :(得分:1)

托管C ++ / CLI具有委托 - 语法与C#几乎完全相同 - 为什么不使用它们而不涉及编组(因为您无论如何都要编译到托管C ++ / CLI)。