Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: arenoide en 22 Octubre 2011, 13:39 pm



Título: Usar dll de C++ en C#
Publicado por: arenoide en 22 Octubre 2011, 13:39 pm
Hola,

Mi aplicación principal la estoy haciendo en C#, pero he encontrado una función que me vendría muy bien. El tema es que está compilado en C++. He estado googleando un poco y he encontrado que para incluir una DLL en C# puedo aprovecharme de .NET Framework y con DLLimport usar las funciones de la DLL. La cosa está en que aunque tengo también el código C++ que genera la librería DLL, soy incapaz de saber cuales son las funciones de entrada de la DLL y demás.
Podría alguien explicarme cómo encontrar las funciones de una DLL en el código o pasarme algún link. Es que claro, al usar el Dllimport, ya no sirve poner el "." y que te salgan las funciones disponibles...

En el código C++ hay un proyecto de ejemplo, pero usa directamente los .h y demás, aunque cuando lo genero al final solo obtengo un .exe muy chico que no funciona si no pones la .dll al lado. Estoy un poco perdido, la verdad.

Gracias de antemano.

Edito:

Entre otras cosas el programa test en C++ tiene esto:

Código
  1. #include "..\Calculator.h"
  2. .
  3. .
  4. .
  5.  
  6. Calculator calc;
  7.  
  8. calc.Calculate(chars1,chars2, chars3, Trials, result);
  9.  

Tras lo cual, la variable que a mí me interesa es la variable result. He usado el programa dll export viewer para detectar las funciones que tiene la dll y, entre otras me ha sacado estas:

const Calculator::`vftable'
public: __thiscall Calculator::Calculator(class Calculator const &)
public: __thiscall Calculator::Calculator(void)
public: class Calculator & __thiscallCalculator::operator=(class Calculator const &)
public: int __thiscall Calculator::Calculate(char const *,char const *,char const *,__int64,double *)
public: virtual __thiscall Calculator::~Calculator(void)

Entiendo que con eso y el Dllimport se puede recrear lo mismo, pero no sé cómo. Alquien me puede echar una mano?