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