Mam nadzieję, że jest to pytanie bezmyślnie proste, ale pokazuje mój brak wiedzy z C++. Jestem programistą C# i w przeszłości robiłem obszerne prace z P/Invoke z bibliotekami C++/C innych ludzi. Jednak tym razem postanowiłem napisać osobną bibliotekę C++ (niezarządzanego), a następnie wywołuję moją bibliotekę otworkową z C#.Jak skonfigurować funkcję C++, aby mogła być używana przez p/invoke?
Problem, na który napotykam od razu, polega na tym, że nie mogę zdefiniować funkcji C++, którą można znaleźć za pomocą p/invoke. Nie wiem, co składnia do tego jest, ale tutaj jest to, co usiłuję do tej pory:
extern bool __cdecl TestFunc()
{
return true;
}
Początkowo po prostu musiałem to, ale to nie działa albo:
bool TestFunc()
{
return true;
}
I następnie po stronie C#, mam:
public const string InterfaceLibrary = @"Plugins\TestDLL.dll";
[DllImport(InterfaceLibrary, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "TestFunc"), SuppressUnmanagedCodeSecurity]
internal static extern bool TestFunc();
Wszystko kompiluje, ale kiedy wykonać to C# p/wywołać rozmowę, mam System.EntryPointNotFoundException: Nie można odnaleźć punktu wejścia o nazwie „TestFunc” w bibliotece DLL " Wtyczki \ TestDLL.dll ".
To musi być coś niesamowicie prostego na końcu C++, którego po prostu nie znam składni.
Idealne, to zrobiło! Próbowałem też mieć extern "C" w przeszłości, ale to nie zadziałało. Zawodzi, dopóki nie zostanie dodany _declspec (dllexport). – x4000