Rozwiązaniem jest stworzenie C++/CLI otoki jak:
#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;
}
};
gdzie CDllExportClass jest klasą wyeksportowaną z natywnego kodu. Powyżej jest .h C++/CLI. Uważaj, aby znaleźć lib do tej biblioteki. Umieść bibliotekę dll i bibliotekę w tym samym katalogu i skompiluj kod C++/CLI. W zarządzanym katalogu kodów umieść bibliotekę dll natywną i bibliotekę C++/CLI. W zarządzanym projekcie umieść odwołanie do projektu C++/CLI. Stanu w magedu kod klasy C++/CLI:
ManagedOperationHelper obj = new ManagedOperationHelper();
double ret=obj.Sum(10, 20);
To wszystko.
Czy możesz opublikować, co próbujesz? – SwDevMan81
i komunikat o błędzie? – Asher
1) void główne (string [] arg) { IntPtr p = nowy IntPtr(); Program.CreateObserv (ref p); } [DllImport (@ "C: \ mm_2008 \ liba.dll" EntryPoint = "?? 0CRls @ FLD @@ QAE @ ABV01 @@ Z", SetLastError = prawda CallingConvention = CallingConvention.ThisCall)] wewnętrzny statyczny zewnętrzny nieważne CreateObserv (ref IntPtr s); kod ten zgłasza wyjątek AccessViolationException: accessviolationexception próbował odczytać lub zapisać chronioną pamięć ... – Evgeny007