c ++ / cli pass delegado (administrado) a código no administrado

¿Cómo paso un puntero de función de C ++ administrado (C ++ / CLI) a un método no administrado? Leí algunos artículos, comoeste de MSDN, pero describe dos ensamblajes diferentes, mientras que solo quiero uno.

Aquí está mi código:

1) Encabezado (MyInterop.ManagedCppLib.h):

#pragma once

using namespace System;

namespace MyInterop { namespace ManagedCppLib {

    public ref class MyManagedClass
    {
    public:
        void DoSomething();
    };
}}

2) Código CPP (MyInterop.ManagedCppLib.cpp)

#include "stdafx.h"
#include "MyInterop.ManagedCppLib.h"

#pragma unmanaged
void UnmanagedMethod(int a, int b, void (*sum)(const int))
{
    int result = a + b;
    sum(result);
}

#pragma managed
void MyInterop::ManagedCppLib::MyManagedClass::DoSomething()
{
    System::Console::WriteLine("hello from managed C++");
    UnmanagedMethod(3, 7, /* ANY IDEA??? */);
}

Intenté crear mi delegado administrado y luego intenté usarMarshal::GetFunctionPointerForDelegate método, pero no pude compilar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta