how para llamar a una función exportada dll C ++ desde c #

Esta es la primera vez que intento mezclar C # y C ++ no administrado, por lo que esta podría ser una pregunta muy simple, pero no la entiendo.

Necesito llamar a algunas funciones desde un dll de C ++ al código C #. Aquí está el código para el proyecto dll:

el archivo .h:

#pragma once 
#include <iostream>
#if defined FIRSTDLL_EXPORTS
    #define DECLDIR __declspec(dllexport)
#else
    #define DECLDIR __declspec(dllimport)
#endif

extern "C"
    {
      DECLDIR int Add( int a, int b );
      DECLDIR void Function( void );
    }

el archivo .cpp

#include "stdafx.h"
#include "myFct.h"
#include <iostream>

extern "C"
{
      DECLDIR int Add( int a, int b )
      {
          return( a + b );
}

      DECLDIR void Function( void )
      {
          std::cout << "DLL Called!" << std::endl;
      }
}

Compilé esto tanto para la depuración como para las versiones y lo copié endebug carpeta de mi proyecto C #. Ninguna de las versiones funcionó.

Aquí está el código C #:

[DllImport("firstDLL.Dll")]
public static extern int Add(int a, int b);


var cyu = Add(3, 5);

Y cuando trato de ejecutar esto obtengo

"El Asistente de depuración administrada 'PInvokeStackImbalance' ha detectado un problema en 'C: \ Archivos de programa \ Microsoft Office \ Office14 \ WINWORD.EXE'. Información adicional: Una llamada a la función PInvoke 'MyAddin! MyAddin.ThisAddIn :: Add' no está equilibrada la pila. Esto es probable porque la firma PInvoke administrada no coincide con la firma de destino no administrada. Verifique que la convención de llamada y los parámetros de la firma PInvoke coincidan con la firma no administrada de destino ".

Pero, como veo, las firmas son las mismas. ¿¿Qué me estoy perdiendo?

¡Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta