La solution est de créer C++/wrapper CLI comme:
#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;
}
};
où CDllExportClass est la classe exportée du code natif. Ci-dessus est le .h du C++/CLI. Prenez soin de laisser trouver la lib à cette DLL. Placez la DLL et la bibliothèque dans le même répertoire et compilez le code C++/CLI. Dans le répertoire de code géré, placez la DLL native et la DLL C++/CLI. Dans le projet géré, mettez la référence du projet C++/CLI. Instancié dans le code maged la classe C++/CLI comme:
ManagedOperationHelper obj = new ManagedOperationHelper();
double ret=obj.Sum(10, 20);
C'est tout.
Pouvez-vous poster ce que vous avez essayé? – SwDevMan81
et le message d'erreur? – Asher
1) static void Main (chaîne [] arguments) { IntPtr p = new IntPtr(); Program.CreateObserv (réf. P); } [DllImport (@ "C: \ mm_2008 \ liba.dll", EntryPoint = "?? 0CRls @ FLD @@ QAE @ ABV01 @@ Z", SetLastError = true, CallingConvention = CallingConvention.ThisCall)] interne externe extern void CreateObserv (ref IntPtr p); ce code déclenche une AccessViolationException: AccessViolationException a tenté de lire ou d'écrire la mémoire protégée ... – Evgeny007