Вызовите делегат C # с указателем на функцию в управляемом переполнении стека

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);
}
}

Я не знаю, что не так с этим кодом 🙁

(Test Class Library скомпилирован в управляемую DLL.)

0

Решение

В управляемом C ++ / CLI есть делегаты — синтаксис практически идентичен C # — почему бы не использовать их вместо этого и не использовать маршаллинг (поскольку вы все равно компилируете в управляемый C ++ / CLI).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]