2009-12-23 9 views
3

Dans mon projet, j'ai obtenu un périphérique qui vient avec des exemples de codes C++. Les codes sont ok et l'appareil fonctionne comme prévu. Mais j'en ai besoin pour parler avec mon interface C# car tous les autres appareils utilisent actuellement l'interface C#.Création d'une DLL C++ et appel à partir de C#

J'ai donc l'intention de créer un DLL Wrapper pour le pilote. Je vais créer ma propre bibliothèque C++ (à partir du code source avec l'interface appropriée) et appeler cette bibliothèque C++ à partir de C# en utilisant DLLImport (appelez simplement mes interfaces ici).

Je suis assez sûr que cela peut être fait de cette façon, mais je n'ai jamais créé une bibliothèque C++ et l'ai utilisé à partir de C# pour le moment. Alors, quelqu'un peut-il me référer à un tutoriel qui va avec mon problème?

J'utilise C++/C# int VS.NET 2008.

Cordialement, Maksud

Répondre

1

En fonction de la DLL et ce que vous devez faire, vous ne pouvez pas besoin de créer une enveloppe directement. Vous pourriez être en mesure de sortir avec P/Invoke pour les fonctions. Vous devrez évaluer vos besoins spécifiques et ce qui est déjà disponible dans les bibliothèques/codes fournis.

+0

+1 pour le bel article. – max

2

Un autre outil utile que vous avez à votre disposition est C++ CLI.

Vous pouvez utiliser C++ CLI pour créer une bibliothèque intermédiaire - une bibliothèque qui expose les classes managées mais exécute le code C++ non managé. Vous pouvez réellement mélanger C++ géré et non géré dans la même DLL.

La partie non managée peut accéder aux DLL non managées sans avoir à utiliser les fonctions PInvoke.

Votre code C# peut accéder aux classes gérées dans cette bibliothèque intermédiaire.

+0

+1. Vous pouvez réellement mélanger C++ géré et non géré dans la même DLL. – RickNZ

+0

@RickNZ - C'est ce que j'essayais de transmettre, mais ça ne devait pas être assez clair. J'ai incorporé votre phrase dans le message maintenant, merci. –

+0

C'est certainement la voie à suivre à moins que vous ne prévoyiez de porter votre bibliothèque vers Mono, qui ne supporte pas le code natif en C++/CLR. –

0

Pour toute personne qui vient à cette question et cherchent des réponses, vous pouvez essayer xInterop NGen++ , a C# wrapper generator for native C++ DLL, qui vient d'être rendu public, l'outil peut générer wrapper C# pour les DLL C++ natives automatiquement et instantanément en utilisant les technologies P/Invoke avancées. Découvrez la version actuelle et une version gratuite sera bientôt disponible.

(Je suis l'auteur de l'outil)

+0

La version 2 semble toujours être en pré-alpha précoce. L'interface utilisateur est lourde et aucun fichier n'est généré. ("Exception a eu lieu: Impossible d'extraire les informations PDB ..") – StuWeldon

+0

@StuWeldon, Vous avez probablement essayé de construire un wrapper C# pour DLL de style C que la version d'essai actuelle ne supporte pas encore, nous avons ajouté le support de DLL C Style dans la dernière version qui n'est pas encore disponible pour le téléchargement. êtes toujours intéressé à utiliser xInterop NGen ++ pour créer un wrapper pour votre DLL de style C. S'il vous plaît contactez-nous en utilisant la page contactez-nous sur notre site web, nous devrions être en mesure de résoudre le problème que vous rencontrez. contactez-nous sur http://www.xinterop.com, nous serons dans une meilleure position pour vous soutenir. – xInterop