Accueil > Forum > > > > DLL en C++ standard utilisé par une IHM en C#/WPF
DLL en C++ standard utilisé par une IHM en C#/WPF
lundi 22 juin 2009 à 21:56:42 |
DLL en C++ standard utilisé par une IHM en C#/WPF

buno
|
Amis de la communautés bonjour! J'aimerais savoir comment, depuis une IHM faite en C#/WPF, appeler une classe C++ se trouvant dans une DLL? Sur le web, je vois principalement 2 méthodes: - P/Invoke et DllImport : dans tous les exemples que je trouve ce sont des fonctions C qui sont appelées. Comment faire dans le cas de plusieurs classes? Je ne vais pas faire l'énumération de l'API complète, non? - faire une classe Wrapper en C++ managé appelant ma classe en C++ non managé. A priori, ceci ne fonctionne que si la DLL a été faite avec des objets COM. Vrai? Sinon, comment faire exactement? Je précise que la DLL ne contient que du C++ tout à fait standard. D'avance, merci de vos retours (j'ai également posé la question sur CppFrance) @+ Buno ---------------------------------------- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
|
|
lundi 22 juin 2009 à 23:46:36 |
Re : DLL en C++ standard utilisé par une IHM en C#/WPF
|
lundi 22 juin 2009 à 23:53:40 |
Re : DLL en C++ standard utilisé par une IHM en C#/WPF

Lutinore
|
Voilà l'exemple mis au propre :
// C++ #define EXTERN_C extern "C" #define DLLEXPORT __declspec(dllexport) class DLLEXPORT Device { private: HWND m_hWnd; public: Device( HWND hWnd ); ~Device( ); BOOL Clear( UINT color ); };
EXTERN_C DLLEXPORT Device* CreateDevice( HWND hWnd ) { Device* pDevice = new Device( hWnd ); return pDevice; } EXTERN_C DLLEXPORT void DestroyDevice( Device* pDevice ) { if ( pDevice != NULL ) { delete pDevice; //pDevice = NULL; } } // C# [ SuppressUnmanagedCodeSecurity ] internal sealed class Device { private const string DLL_NAME = @"GX.dll"; [ DllImport( DLL_NAME, CallingConvention = CallingConvention.StdCall ) ] public static extern IntPtr CreateDevice( IntPtr hWnd ); [ DllImport( DLL_NAME, CallingConvention = CallingConvention.StdCall ) ] public static extern void DestroyDevice( IntPtr pDevice ); [ DllImport( DLL_NAME, CallingConvention = CallingConvention.ThisCall, EntryPoint = " ?Clear@Device@@QAEHI@Z " ) ] [ return: MarshalAs( UnmanagedType.Bool ) ] public static extern bool Clear( IntPtr pDevice, int color ); }
|
|
mardi 23 juin 2009 à 20:56:17 |
Re : DLL en C++ standard utilisé par une IHM en C#/WPF

buno
|
Ok merci, je vais regarder ça de plus près. Quelques questions en attendant: - pour ajouter les fonctions create() et destroy(), cela suppose que j'ai accès au code de la DLL, ce qui est effectivement le cas pour moi. Dans le cas contraire, la méthode P/Invoke ne peut donc pas s'appliquer? - la fonction Clear() fait partie de la classe Device. Je dois donc lister toutes les fonctions de toutes mes classes dans le DllImport? - comment fait-on pour connaître la décoration des fonctions? NB: y'a des mots clés que je ne maitrise pas encore (sealed, MarshalAs). Je file me documenter..mais je reviendrais sûrement  @+ Buno ---------------------------------------- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
|
|
mercredi 24 juin 2009 à 04:45:34 |
Re : DLL en C++ standard utilisé par une IHM en C#/WPF

Lutinore
|
Réponse acceptée !
- Effectivement il faut avoir accès au code source ou une petite dll supplémentaire en flat C juste pour instancier et détruire la classe ou se tourner vers le C++/CLI pour mixer du code natif et du code managé.
- Oui tu vas devoir écrire toutes les définitions P/Invoke des méthodes ( que tu souhaites utiliser ) de ta classe native.
- EXTERN_C permet d'eviter la décoration des noms de fonctions mais pour les méthodes contenues dans une classe j'ai jamais trouvé comment l'eviter. J'utilise DumpBin.exe qui se trouve soit dans le platforme SDK ( soit dans VS, je sais plus ) pour trouver le nom décoré.
|
|
lundi 6 juillet 2009 à 15:05:32 |
Re : DLL en C++ standard utilisé par une IHM en C#/WPF

buno
|
Merci Lutinore, ça m'a bien aidé, même si le projet a fait qu'on utilise la solution du Wrapper...
@+ Buno ---------------------------------------- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
|
|
Cette discussion est classée dans : dll, classe, standard, ihm, wpf
Répondre à ce message
Sujets en rapport avec ce message
Dll externe + classe [ par marm0tte ]
Salut, bon voila, j'ai pas trouvé sur le site, comment utliser une classe se trouvant dans une dll externe (wmi.dll)Je ne sais pas ocmment la déclarer
utlisation dans une ihm d'une classe? [ par Cookai ]
Bonjour,voila j'ai un petit probléme.Je sais que quand on créée une nouvelle feuille(WinForm) ,il se crée automatiquement une classe propre à cette pa
Utilisation DLL C++ en C# [ par pma3d ]
Bonjour à tous. Avant toute chose, je tiens à préciser que j'ai découvert à la fois .NET, C++ et les dlls il y a maintenant une semaine (vive l'ensei
[.Net] Création de DLL et double chainage [ par Atmaweapon ]
Bonjour à tous ! J'ai un problème pas forcément évident à expliquer, donc je me suis donné la peine de faire un schéma pour vous l'expliquer. Le voici
Objet unique [ par fregolo52 ]
Bonjour,Je suis en .NET 1.1Je me suis basé sur le snipper singleton de Nikoui mais ca ne marche pas.Ce que je veux, en gros, c'est un singleton multip
generation dynamique de code [ par Blobette ]
Bonjour à tous,Je suis à la recherche d'un moyen pour réaliser la chose suivante en C# : j'aurais une IHM dans laquelle l'utilisateur pourra ecrire en
Dll, arguments & classe utilisateur [ par MyXiLo ]
Bonjour,Je voudrais passer un argument dérivant d'une classe utilisateur à une méthode d'une dll.J'ai un programme qui contient une classe MaClass et
utilisation de fonctions de classe à partir d'une DLL C++ dans une application C# [ par telephonerouge ]
bonjour,Alors en tout désepoir je vous écris espérant que vous pourriez m'aider.Alors mon problème est:J'ai une application en C#.net qui ne contient
création d'une dll usercontrol WPF sous express2008 [ par terrible ]
bonsoir, j'ai créé un template pour développer sous express#2008 des usercontrol en wpf lorsque j'appelle mon modèle pour développer des usercontrol j
Architecture logicielle C# .NET WPF DLL [ par jon_private ]
Bonjour à tous, Je suis actuellement en train de travailler sur un projet, et j'aimerais avoir l'avis d'experts sur l'architecture que je souhaite me
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|