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] :

images/RI-9-02.png

"9" est bien affiché, donc le résultat du calcul non managé a bien été remonté...

couv_RI4CAPOO.png

Découvrez 

le livre :

Aussi inclus dans nos :

Précédent
Le cas simple
Suivant
Traitement avec des chaînes de caractères