zu importieren Ich versuche, bei C++ Project Dll zu einem C# -Projekt zu importieren. Ich habe eine Menge Leute gefunden, die über die Verwendung von DllImport sprechen. Ich habe versucht, dass die Verwendung und hier ist das, was ichNicht möglich, C++ DLL in C# -Projekt mit DllImport
CPP-Code haben-:
int __declspec(dllexport) beginCode(double reportId);
C# Code:
[DllImport("C:\\Users\\<my_user_id>\\Desktop\\ctxmix\\Release\\ctxmix.dll",CallingConvention =CallingConvention.Cdecl ,CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int beginCode(double reportId);
int result = beginCode(reportId);
Aber wenn ich laufe, ich bin immer eine Ausnahme - Ausnahme ausgelöst: 'System.DllNotFoundException'
Muss ich irgendwelche Referenzen für die CPP Dll in der hinzufügen Projekt oder irgendetwas anderes außer dem Code, den ich oben habe?
Edit: Ich versuche, meine .exe mit VS2015 auszuführen, und ich bekomme diese Ausnahme auf meinem lokalen Rechner. Außerdem sehe ich meine CPP-DLL nicht im Bereich Projekt-> Referenzen, wo ich andere Referenzen sehe.
Nein, es ist kein Duplikat, da sie auf dem Computer erfolgreich ausgeführt werden können, aber nicht auf einem anderen Windows 2003-Computer. In meinem Fall bekomme ich diese Ausnahme in meinem Computer, wenn ich es mit VS2015 starte. – Teja
Ich würde den Befehl 'dumpbin/exports [Ihre DLL hier]' verwenden (in der Visual Studio-Eingabeaufforderung enthalten), um zu sehen, was der exportierte Funktionsname tatsächlich ist. Odds sind, der C++ - Compiler ist name-manging beginCode zu etwas anderem, so dass es die Funktion nicht finden kann. Sie können dies möglicherweise beheben, indem Sie "ExactSpelling" in false ändern. Ich denke auch nicht, dass CallingConvention.Cdecl für eine C++ DLL geeignet ist, ich denke, dass Sie StdCall wollen. – Cody
Danke @ Cody. Ich habe Dependency Walker verwendet und festgestellt, dass einige verwandte Abhängigkeiten nicht abgerufen werden können. Ich habe sie zum Ordner C: \ Windows \ System32 hinzugefügt und diesen in der Umgebungsvariablen 'Path' hinzugefügt. Jetzt kann ich diesen Fehler umgehen. Vielen Dank. – Teja