Appel avec paramètres et retour de fonction
Ce second exemple (projet PInvoke02 à télécharger) montre :
-
une transmission de paramètres de types classiques, des entiers en l’occurrence, entre un objet C# et une fonction C/C++,
-
la récupération du résultat de la fonction C/C++ dans l’objet C#.
La fonction C/C++ retourne l’addition de deux entiers passés en paramètres.
Le type int est automatiquement pris en charge par P-Invoke et par son bras droit, le Marshal ; donc, pour l’instant, rien de très compliqué…
Côté DLL, voici la fonction C/C++ :
#include "pch.h"
__declspec(dllexport) void AfficheSurConsoleEnMultibyte(char*
szMessage)
{
printf(szMessage);
}
Pensez à toujours déclarer la fonction dans le fichier de définition (.def) :
LIBRARY
EXPORTS
Additionner
Côté C#, voici la déclaration et l’appel à la fonction C/C++ :
using System.Runtime.InteropServices;
[DllImport("Dll_C.dll", EntryPoint = "Additionner",
CallingConvention = CallingConvention.Cdecl)]
static extern int Additionner(int x, int y);
Console.WriteLine( Additionner(4, 5));
Après compilation, vérifiez le fonctionnement par [Ctrl][F5] :
"9" est bien affiché, donc le résultat du calcul non managé a bien été remonté...