Sommaire

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 "stdafx.h" 
#include "Dll_C.h" 
 
 
__declspec(dllexport) int Additionner(int x, int y) 
{ 
    return x + y; 
}

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; 
using System.Runtime.InteropServices; 
 
namespace ConsoleApp 
{ 
    class Program 
    { 
        [DllImport("Dll_C.dll", EntryPoint = "Additionner", 
CallingConvention = CallingConvention.Cdecl)] 
        static extern int Additionner(int x, int y); 
 
        static void Main(string[] args) 
      ...