2010-06-29 6 views
1

Je suis très nouveau à C#, et j'essaye d'utiliser un paquet d'aide pour mon projet. Le paquet est écrit en c et a 1)/bin/plusieurs fichiers .dll 2)/include/a un fichier d'en-tête 3)/lib/msvc/.lib fichier ma question est de savoir comment puis-je utiliser ces fichiers dans mon projet C# WPF? Je sais qu'il n'y a pas de "#include" en C#, et le fichier .dll ne peut pas être importé en ajoutant à la référence du projet. alors comment puis-je le faire en C#?comment utiliser la bibliothèque d'en-têtes C dll dans C#

Merci

+0

un peu d'aide ici: http://stackoverflow.com/questions/3008874/reverse-p-invoke-tutorial/3009317#3009317 – lsalamon

Répondre

5

Vous devez ajouter une série de définitions de méthode C# Platform Invocation. Cela indique à C# comment appeler le fichier .dll et utilise directement l'API C.

Les fichiers d'en-tête et de bibliothèque sont complètement inutilisés.

+0

+1 pour souligner que les fichiers d'en-tête et de bibliothèque ne sont pas utilisés dans PInvoke interop (bien que un humain doit utiliser l'en-tête pour générer les déclarations C#.) –

1

Vous trouverez peut-être géré C++ utile. Vous pouvez écrire une bibliothèque C++ gérée qui utilise directement les fichiers d'en-tête et le fichier .lib, et les enveloppe avec un ensemble de classes .NET à utiliser par C#.

2

Juste ajouter aux réponses, vous pouvez jeter un oeil dans this blog. Il a un lien vers un addin Visual Studio qui peut générer des signatures P/Invoke à partir de vos en-têtes.

Meilleur

+0

+1, inclus dans ce post est un lien vers l'assistant P/Invoke Interop, très pratique: http://clrinterop.codeplex.com/releases/view/ 14120 – Mark

0

Il y a beaucoup de façons de le faire « Interop » - Une fois, je l'ai fait une conférence appelée « tourner la tête Interop ». La clé est la structure de votre DLL native. Puisque vous dites qu'il est en C, il est probable qu'il soit en parfait état pour être utilisé avec PInvoke, qui fonctionne mieux avec les fonctions C ou les fonctions de style C en C++. Les autres réponses ont d'excellents pointeurs sur la syntaxe et certains aident à obtenir votre fonction (et les paramètres qu'elle prend) déclarés du côté C#.

Les deux autres options principales sont un wrapper C++/CLI, un bon choix quand les fonctions prennent beaucoup de types compliqués, ou COM, ce qui vous obligerait presque certainement à changer le code natif cette situation.

Questions connexes