Die Lösung ist erstellen C++/CLI-Wrapper wie:
#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;
}
};
Dabei ist CDllExportClass die aus dem systemeigenen Code exportierte Klasse. Oben ist das .h von C++/CLI. Achten Sie darauf, die lib zu dieser DLL zu finden. Setzen Sie die DLL und die Lib in das gleiche Verzeichnis und kompilieren Sie den C++/CLI-Code. Im verwalteten Code-Verzeichnis setzen Sie die native DLL und die C++/CLI-DLL. Fügen Sie im verwalteten Projekt die Referenz des C++/CLI-Projekts ein. Im C++/CLI-Code wird die C++/CLI-Klasse wie folgt initialisiert:
ManagedOperationHelper obj = new ManagedOperationHelper();
double ret=obj.Sum(10, 20);
Es ist alles.
Können Sie posten, was Sie versucht haben? – SwDevMan81
und die Fehlermeldung? – Asher
1) static void Haupt (string [] args) { IntPtr p = neue IntPtr(); Program.CreateObserv (ref p); } [DllImport (@ "C: \ mm_2008 \ liba.dll" Entrypoint = "?? 0CRls @ @@ FLD QAE @ @@ ABV01 Z", SetLastError = true, Calling = Calling.ThisCall)] intern statisch extern void CreateObserv (ref IntPtr p); dieser Code löst eine Access: Access zu lesen versucht oder geschützten Speicher schreiben ... – Evgeny007