Reverse PInvoke de C ++ nativo

Actualmente estoy intentando llamar a una función desde una DLL de C # desde una aplicación de C ++ no administrada.

Después de buscar horas en la web y SO, encontré que tengo algunas opciones.

Puedo usar COM,DllExport, o use el PInvoke inverso con delegados. El último me sonó más atractivo, así que después de buscar SO terminéaquí.

Establece que el artículo muestra cómo usar PInvoke inverso, pero parece que el código C # tiene que importar primero el archivo C ++ Dll, antes de que se pueda usar.

Necesito poder usar C ++ para llamar a mis funciones Dll de C #, sin ejecutar primero una aplicación de C #.

Tal vez el modo inverso de PInvoke no sea el inverso, pero no tengo mucha experiencia en lo que respecta a las cosas de bajo nivel, por lo que cualquier sugerencia o consejo sobre cómo hacerlo sería genial.

El código en el enlace es

DO#

using System.Runtime.InteropServices;

public class foo    
{    
    public delegate void callback(string str);

    public static void callee(string str)    
    {    
        System.Console.WriteLine("Managed: " +str);    
    }

    public static int Main()    
    {    
        caller("Hello World!", 10, new callback(foo.callee));    
        return 0;    
    }

    [DllImport("nat.dll",CallingConvention=CallingConvention.StdCall)]    
    public static extern void caller(string str, int count, callback call);    
}

C ++

#include <stdio.h>    
#include <string.h>

typedef void (__stdcall *callback)(wchar_t * str);    
extern "C" __declspec(dllexport) void __stdcall caller(wchar_t * input, int count, callback call)    
{    
    for(int i = 0; i < count; i++)    
    {    
        call(input);    
    }    
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta