Espérons que c'est une question sans intelligence, mais cela montre mon manque d'expertise en C++. Je suis un programmeur C#, et j'ai déjà beaucoup travaillé avec P/Invoke dans le passé avec les dll C++/C d'autres personnes. Cependant, cette fois j'ai décidé d'écrire un wrapper C++ dll (non géré) moi-même, et ensuite j'appelle mon wrapper dll de C#.Comment configurer une fonction C++ pour qu'elle puisse être utilisée par p/invoke?
Le problème que je rencontre immédiatement est que je suis incapable de définir une fonction C++ qui peut être trouvée par p/invoke. Je ne sais pas ce que la syntaxe est, mais voici ce que je suis en train jusqu'à présent:
extern bool __cdecl TestFunc()
{
return true;
}
Au départ, je simplement eu, mais il ne fonctionne pas non plus:
bool TestFunc()
{
return true;
}
Et puis sur le côté C#, je:
public const string InterfaceLibrary = @"Plugins\TestDLL.dll";
[DllImport(InterfaceLibrary, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "TestFunc"), SuppressUnmanagedCodeSecurity]
internal static extern bool TestFunc();
Tout compile, mais quand j'exécute cette C# p/Invoke appel, je reçois un System.EntryPointNotFoundException: Impossible de trouver un point d'entrée nommé « TestFunc » dans DLL " Plugins \ TestDLL.dll '.
Sûrement cela doit être quelque chose d'incroyablement simple à l'extrémité C++ dont je ne connais pas la syntaxe.
Parfait, ça l'a fait! J'avais aussi essayé d'avoir extern "C" dans le passé, mais cela n'a pas fonctionné. Il échoue jusqu'à ce que le _declspec (dllexport) soit ajouté. – x4000