Appels de fonctions natives sous C#

Slides:



Advertisements
Présentations similaires
Introduction Rétro ingénierie d’interfaces graphiques
Advertisements

La programmation orientée objet avec Java L3-MIAGE Plan
Langage C# et Plate-forme .NET
Formation universitaire à .NET: Introduction à C#
Automatisation de Tâches Scenarios
Introduction au langage C++
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Intégration Excel / C++
la programmation en langage C
C.
Programmer en JAVA par Tama
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
PHP5 poo.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
Programmation Orientée Objet (POO)
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
Programmation orientée objet
Création, configuration et déploiement d’un OS Windows Embedded CE.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
.Net Remoting.
Des outils pour le développement logiciel
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Structures de données IFT-10541
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
Microsoft .NET.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
ISV Crée une solution smart document pour aider les commerciaux à la rédaction des propositions commerciales ISV crée un volet activable par lutilisateur.
NON, LE C++ N’EST PAS MORT !!!!! Visual Studio 2005 et le C++ Introduction : Pourquoi le C++/CLI ? C++/CLI : Eléments Syntaxiques C++/CLI : Garbage collection.
Héritage et composition
Programmation Système et Réseau (sous Linux)
La notion de type revisitée en POO
Créer des packages.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
PHP 7° PARTIE : PROGRAMMATION OBJET
Développer avec ORBacus Partie 1 – Les préalables.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours du 5 novembre.
MOCK.
Les classes Introduction aux Langages Orientés Objets
Le Browser hiérarchique de Classes Java : En quoi cette application pourra faciliter le travail de Mr Leblanc ?
Chapitre VII Techniques plus avancées à travers le concept de classe.
Héritage Conception par Objet et programmation Java
Cours No13 Introduction à COM. Contenu du cours Qu’est-ce que COM Accéder à l’interface de Word à partir de VB Accéder à l’interface d’XL à partir de.
Introduction à la Programmation Orientée Objet
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
LES CLASSES ET LES OBJETS
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Informatique 2A Langage C 2 è séance. Objectifs de la séance 2 Début de la modularité avec les fonctions Création d’une première bibliothèque.
Environnement de développement des BD
Transcription de la présentation:

Appels de fonctions natives sous C# Proposition d’une architecture pour « wrapper » une classe native

Managed code vs Unmanaged code C++ (compilation, décoration, exportation) Fonctionnalités « interops » de .NET Architecture proposée Création des 4 projets Déploiement

Managed Code vs Unmanaged code Managed code : code exécuter (interpréter) sous le « framework » .NET.

Managed Code vs Unmanaged code Sous .NET CF 2.0, il n’y a pas de C++/CLI

C++: Compilation Lors de la compilation, le compilateur génère un fichier .obj par fichier .cpp qu’il compile. Toutes les fonctions et variables globales compilées dans un fichier .obj sont « marquées ». Lors de l’application des liens, le « Linker » génère un fichier « PE » en liant tous les fichiers .obj.

C++: Décoration La déclaration d’une fonction dans un fichier .obj est encodée (décorée). L’algorithme de décoration dépend du compilateur (et parfois aussi de sa version). En C, il n’y a habituellement pas de décoration.

C++: Décoration Exemple: soit la variable globale « int dllVersion ». Son nom décoré sera « ?dllVersion@@3MA » sous Visual C++ 2005 Pour déclarer, sous C++, une entité non décorée; il faut forcer le compilateur à l’interpréter comme du code C: extern ”C” int dllVersion;

C++: Exportation Pour exporter une variable globale ou fonction, sa déclaration doit être ajoutée dans la table d’exportation du fichier « PE ». « __declspec(dllexport) » le fait automatiquement.

C++: Exportation

C++: Exportation Pour exporter une fonction non décorée: extern “C” __declspec(dllexport) void fnt(int);

Fonctionnalités « Interops » de .NET P/invoke permet, sous .NET, d’exécuter du code natif (unmanaged). Sous CF 2.0, la convention d’appel est __cdecl [DllImport("CommandCInterface.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode, EntryPoint = "SetNameAgeCommand_SetNameAgeCommand_name_age")] internal static extern IntPtr SetNameAgeCommand_SetNameAgeCommand_name_age(byte[] name, Int32 age);

Architecture proposée : buts Pouvoir simplement importer une classe sous C# qui fut implémentée sous C++ (unmanaged). Apporter très peu de modifications au projet à importer. Compréhensible et possiblement automatisable. Simple à déployer.

Architecture proposée : Modèle

Architecture proposée: projet « Command.dll » Est un projet C++ unmanaged code. Est le projet original à importer sous .NET Nécessite très peu (ou pas du tout de modification).

Architecture proposée: CommandCInterface.dll Est un projet C++ unmanaged code. Est une interface C de la classe Command. Pour chaque fonction membre de la classe « Command », il faut exporter une fonction « wrapper » Il faut ajouter une référence au projet Command.dll Exemple: extern "C" __declspec(dllexport) void SetNameAgeCommand_EncodeCommand(SetNameAgeCommand *this_);

Architecture proposée: CommandCSInterface.dll Est un projet C#. Est une interface C# de la classe Command. Pour chacune des fonctions exportées de CommandCInterface.dll, il faut ajouter une fonction statique de type p/invoke. Il faut ajouter une dépendance au projet CommandCInterface.dll.

Architecture proposée: CommandCSInterface.dll La classe interface doit encapsuler un pointeur « protected IntPtr this_; » sur l’objet « Command ». Il doit être passé en paramètre lors de l’appel d’une fonction. « this_ » est initialisé lors de la création d’une instance. « this_ » est détruit lors de la destruction de l’instance.

Architecture proposée: CommandCSInterface.dll [DllImport("CommandCInterface.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode, EntryPoint = "SetNameAgeCommand_EncodeCommand")] private static extern void SetNameAgeCommand_EncodeCommand(IntPtr p);

Architecture proposée: DeviceApp.exe Est un projet C# Utilise l’interface C# pour accéder à un objet de type « Command ». Il faut ajouter une référence au projet CommandCSInterface.dll.

Création du projet Command.dll C++, librairie pour Windows Mobile Device 5.0. Réutiliser les mêmes fichiers utilisés pour compiler le projet sous Win32. S’assurer d’être en « Unicode ».

Création du projet: CommandCInterface.dll C++, librairie pour Windows Mobile Device 5.0. S’assurer d’être en « Unicode ». Ne pas oublier la référence sur Command.dll

Création du projet: CommandCSInterface.dll C#, librairie 2.0 pour Windows Mobile Device 5.0. Ne pas oublier la dépendance sur CommandCInterface.dll.

Création du projet: DeviceApp.exe C# application graphique 2.0 pour Windows Mobile Device 5.0. Ne pas oublier la référence sur CommandCSInterface.dll.

Déploiement Il est important d’ajuster les propriétés des 4 projets concernant leur déploiement. Tous les projets doivent être déployés dans le même répertoire!

Questions…