Hoffentlich ist dies eine hirnlos einfache Frage, aber es zeigt meine fehlende Expertise mit C++. Ich bin ein C# -Programmierer und habe mit P/Invoke in der Vergangenheit umfangreiche Arbeit mit C++/C-DLLs anderer Leute geleistet. Dieses Mal habe ich mich jedoch entschieden, selbst eine Wrapper-C++ - DLL (unmanaged) zu schreiben und meine Wrapper-DLL von C# anzurufen.Wie richtet man eine C++ - Funktion ein, damit sie von p/invoke verwendet werden kann?
Das Problem, auf das ich sofort hinlaufe, ist, dass ich keine C++ - Funktion definieren kann, die von p/invoke gefunden werden kann. Ich weiß nicht, was die Syntax für das ist, aber hier ist, was ich bisher versucht:
extern bool __cdecl TestFunc()
{
return true;
}
Ursprünglich einfach das ich hatte, aber es hat nicht funktioniert entweder:
bool TestFunc()
{
return true;
}
Und dann auf der C# Seite, ich habe:
public const string InterfaceLibrary = @"Plugins\TestDLL.dll";
[DllImport(InterfaceLibrary, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "TestFunc"), SuppressUnmanagedCodeSecurity]
internal static extern bool TestFunc();
Alles kompiliert, aber wenn ich diese C# p/aufrufen Aufruf ausführen, erhalte ich eine System.EntryPointNotFoundException: Nicht imstande, einen Einstiegspunkt namens ‚TestFunc‘ in DLL zu finden ' Plugins \ TestDLL.dll '.
Sicher muss dies etwas unglaublich einfach auf dem C++ Ende sein, dass ich einfach nicht die Syntax dafür kenne.
Perfekt, das ist es! Ich hatte auch versucht, in der Vergangenheit nur extern "C" zu haben, aber das hat nicht funktioniert. Es schlägt fehl, bis die _declspec (dllexport) hinzugefügt wird. – x4000