0

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にコンパイルされます。)

4

1 に答える 1

1

マネージド C++/CLI にはデリゲートがあります - 構文は C# とほぼ同じです - 代わりにそれらを使用しないでください。マーシャリングは必要ありません (とにかくマネージド C++/CLI にコンパイルしているため)。

于 2012-10-06T14:27:44.020 に答える