como chamar uma função exportada da DLL C ++ a partir de c #

Esta é a primeira vez que estou tentando misturar c # um C ++ não gerenciado, portanto essa pode ser uma pergunta muito simples, mas não entend

Eu preciso chamar algumas funções de uma dll C ++ em código C #. Aqui está o código para o projeto dll:

o arquivo .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 );
    }

o arquivo .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;
      }
}

Eu compilei isso para depuração e liberação e copiei-o nodebug pasta do meu projeto c #. Nenhuma versão funcionou.

Aqui está o código c #:

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


var cyu = Add(3, 5);

E quando tento executar isso, recebo

"O Assistente de Depuração Gerenciada 'PInvokeStackImbalance' detectou um problema em 'C: \ Arquivos de Programas \ Microsoft Office \ Office14 \ WINWORD.EXE'. Informações adicionais: Uma chamada para a função PInvoke 'MyAddin! MyAddin.ThisAddIn :: Add' desequilibrou provavelmente porque a assinatura PInvoke gerenciada não corresponde à assinatura de destino não gerenciada. Verifique se a convenção de chamada e os parâmetros da assinatura PInvoke correspondem à assinatura não gerenciada de destino. "

Mas como vejo as assinaturas são as mesmas. O que estou perdendo?

Obrigado

questionAnswers(1)

yourAnswerToTheQuestion