Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2873 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Appeler une DLL C++/MFC à partir d'un code C#

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appeler une DLL C++/MFC à partir d'un code C#

n°1356422
slash33
Posté le 29-04-2006 à 11:51:37  profilanswer
 

Question de novice. Pas taper si la question vous paraît idiote.
 
J'ai besoin de savoir si c# permet l'utilisation de code C++ (non managé) inclus dans des DLL. Si oui comment fait-on ?
 
Merci d'avance.

Message cité 1 fois
Message édité par slash33 le 29-04-2006 à 11:54:49
mood
Publicité
Posté le 29-04-2006 à 11:51:37  profilanswer
 

n°1356457
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-04-2006 à 12:51:38  profilanswer
 

slash33 a écrit :

Question de novice. Pas taper si la question vous paraît idiote.
 
J'ai besoin de savoir si c# permet l'utilisation de code C++ (non managé) inclus dans des DLL. Si oui comment fait-on ?
 
Merci d'avance.


oui, cf mon plugin dans ma signature [:god]
le plugin est en fait constitué de 2 fichiers : gen_hfr.dll, qui est une dll en C++ managé, dont le rôle est d'utiliser des classes présentes dans un autre fichier : Plugin.dll, en C# et placé dans le GAC
voici le code :

Code :
  1. #include "stdafx.h"
  2. #include "../winamp/gen.h"
  3. #include "../winamp/wa_ipc.h"
  4.  
  5. #using <system.dll>
  6. #using <mscorlib.dll>
  7. #using <System.Windows.Forms.dll>
  8.  
  9. using namespace System::Threading;
  10. using namespace System::Windows::Forms;
  11.  
  12. #undef MessageBox
  13.  
  14.  
  15. // déclarations des fonctions globales Winamp
  16. void config(void);
  17. void quit(void);
  18. int init(void);
  19.  
  20. __value struct Globals
  21. {
  22.     static Plugin::MainApp *thePlugin = NULL;
  23.     static Plugin::FrmProfile *theGUI = NULL;
  24. };
  25.  
  26. winampGeneralPurposePlugin plugin = {
  27.     GPPHDR_VER, //
  28.         "HFR signature update v1.21 (gen_hfr.dll)",
  29.         init,
  30.         config,
  31.         quit
  32. };
  33.  
  34. void config(void)
  35. {
  36.     Globals::theGUI = new Plugin::FrmProfile(Globals::thePlugin);
  37.     Globals::theGUI->ShowDialog();
  38.     Globals::theGUI = NULL;
  39. }
  40.  
  41. void quit(void)
  42. {
  43.     Globals::thePlugin->Quit();
  44.     Globals::thePlugin = NULL;
  45. }
  46.  
  47. int init(void)
  48. {
  49.     Globals::thePlugin = new Plugin::MainApp(plugin.hwndParent);
  50.     return 0;
  51. }
  52.  
  53.  
  54. extern "C" {
  55.     __declspec(dllexport) winampGeneralPurposePlugin *winampGetGeneralPurposePlugin(void)
  56.     {
  57.         return &plugin;
  58.     }
  59. }

c'est tout con hein ? [:god]


Message édité par Harkonnen le 29-04-2006 à 12:52:16

---------------
J'ai un string dans l'array (Paris Hilton)
n°1356459
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-04-2006 à 12:58:43  profilanswer
 

ah merde, j'ai lu la question à l'envers [:petrus75]
pour appeler une dll à partir de C#, faut faire du P/Invoke, ie il faut déclarer la fonction que tu veux utiliser, en marshallant (convertissant) les types natifs en types .NET, ce qui peut se réveler rapidement un casse tête sans nom.
 
ex pour utiliser la fonction SendMessage de user32.dll en C#

Code :
  1. [DllImport("user32.dll", EntryPoint = "SendMessageW" )]
  2.         static unsafe extern int SendMessage(
  3.             IntPtr hWnd,
  4.             int msg,
  5.             int wParam,
  6.             int lParam);


si tu tiens à te lancer là dedans, va faire un tour sur ce site, ça aide bien :
http://www.pinvoke.net/


---------------
J'ai un string dans l'array (Paris Hilton)
n°1356467
slash33
Posté le 29-04-2006 à 13:38:39  profilanswer
 

Merci pour les renseignements.
 
Le pourquoi de ma question:
 
Comme tu le sais, je viens d'intégrer une nouvelle société. Elle est confrontée à une problématique sur laquelle je suis succeptible d'agir : doit on amorcer la migration vers .NET des moyens de développement ?
 
Les exigences portent surtout sur la possibilité de réutiliser les composants métiers développés dans la société au cours des années d'exercice précédentes. Il s'agit en fait de DLLs C++/MFC et VB. Les points d'entrée acceptent non pas des types standards mais un objet instance d'une classe spécifique qui gère de manière extensible les paramètres et les valeurs de retour. Cet artifice permet de stabiliser les interfaces des modules métiers.


Message édité par slash33 le 29-04-2006 à 13:46:00
n°1461174
jipo
Kamoulox !
Posté le 20-10-2006 à 11:13:30  profilanswer
 

Slt,
 
Et qu'en est il de l'instanciation, depuis C#, d'une classe définie dans une DLL C++ ? Est-ce possible ? Ou est-ce une abération ?
Un exemple de code serait le bienvenu ...


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1461189
_darkalt3_
Proctopathe
Posté le 20-10-2006 à 11:42:26  profilanswer
 
n°1461293
jipo
Kamoulox !
Posté le 20-10-2006 à 13:25:43  profilanswer
 

Merci,
 
Ca a pas l'air simple ....


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1461356
_darkalt3_
Proctopathe
Posté le 20-10-2006 à 14:04:42  profilanswer
 

Bah c'est basé sur le dialogue par evenement, avec quelques subtilité de configuration. Mais globalement je trouve ça plutot propre. Ca permet aussi de se passer d'interface en C et de se refiler que des types de base.


---------------
Töp of the plöp

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Appeler une DLL C++/MFC à partir d'un code C#

 

Sujets relatifs
Simplification du code[Resolu] Appel de javascript depuis code .Net
comment inserer du code html avec javascript ?Balise div dans le code .NET
[MFC et ODBC] Requete SQLNumérotater les lignes de code VBA dans le VBAProject
[divers] Mettre en forme son code sur word[Java]Modification de code[Résolu]
[Aide] Code source toolbar ....Récupérer le code html d'une page web
Plus de sujets relatifs à : Appeler une DLL C++/MFC à partir d'un code C#


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR