La solución es crear C++/envoltura CLI como:
#include "DllExportClass.h"
public ref class ManagedOperationHelper
{
public:
double Sum(double add1, double add2)
{
CDllExportClass obj;
double ret=obj.Sum(add1, add2);
return ret;
}
double Mult(double mult1, double mult2)
{
CDllExportClass obj;
double ret=obj.Mult(mult1, mult2);
return ret;
}
};
donde CDllExportClass es la clase exportada desde el código nativo. Arriba está el .h de C++/CLI. Tenga cuidado de dejar encontrar la lib a este dll. Coloque el dll y la lib en el mismo directorio y compile el código C++/CLI. En el directorio del código administrado, coloque el dll nativo y el dll de C++/CLI. En el proyecto administrado, ponga la referencia del proyecto C++/CLI. Instanciate en el código maged la clase C++/CLI como:
ManagedOperationHelper obj = new ManagedOperationHelper();
double ret=obj.Sum(10, 20);
Es todo.
¿Puedes publicar lo que has intentado? – SwDevMan81
y el mensaje de error? – Asher
1) vacío estático Principal (cadena [] args) { IntPtr p = new IntPtr(); Program.CreateObserv (ref p); } [DllImport (@ "C: \ mm_2008 \ liba.dll", EntryPoint = "?? 0CRls @ FLD @@ QAE @ ABV01 @@ Z", SetLastError = true, CallingConvention = CallingConvention.ThisCall)] extern interno estático void CreateObserv (ref IntPtr p); este código arroja una excepción AccessViolationException: accessviolationexception intentó leer o escribir en la memoria protegida ... – Evgeny007