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