2011-02-15 7 views
19

Je suis nouveau en C# et j'essaie d'apprendre à utiliser des DLL. J'essaie d'emballer mes objets dans une DLL, puis l'utiliser dans mon programme.Appelez la fonction de DLL?

public class Foo // its in the DLL 
{ 
    public int ID; 
    public void Bar() 
    { 
     SomeMethodInMyProgram(); 
    } 
} 

J'essaie donc d'emballer à un DLL, mais je ne peux pas, parce que le compilateur ne sait pas ce que le SomeMethodInMyProgram() est.

Je voudrais l'utiliser comme:

class Program // my program, using DLL 
{ 
    static void Main(string[] args) 
    { 
     Foo test = new Foo(); 
     test.Bar(); 
    } 
} 

Répondre

20

Ajouter la DLL via l'explorateur de solution - clic droit sur les références -> ajouter une référence puis "Parcourir" pour vous DLL - alors il devrait être disponible.

4

vous devez charger réellement la DLL dans votre application au moment de l'exécution, ainsi la partie dynamique de DLL. Vous avez également besoin du fichier d'en-tête qui définit les fonctions de la DLL afin que votre compilation sache quelles fonctions ont été définies. Ma connaissance ici est basée sur C++ donc comment cela fonctionne pour C# Je ne suis pas sûr, mais ce sera quelque chose comme ça ...

+3

C# est assez différent de C \ C++ à cet égard. L'exécution .NET peut extraire suffisamment d'informations à partir du fichier .dll pour déterminer quelles sont les signatures de méthode (il n'y a pas de fichiers d'en-tête dans C#) – Jimmy

+2

ah, eh bien. erm ... continuez – thecoshman

28

Dépend de quel type de DLL. Est-ce construit en .NET? s'il s'agit d'un code non géré, alors voici un exemple, sinon la réponse de Rob fonctionnera.

Unmanaged exemple dll C de:

using System; 
using System.Runtime.InteropServices; 

Vous devrez peut-être utiliser DllImport

[DllImport(@"C:\Cadence\SPB_16.5\tools\bin\mpsc.dll")] 
static extern void mpscExit(); 

ou

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); 

Alors chacun de ceux-ci sont appelés comme ceci:

// a specific DLL method/function call 
mpscExit(); 
// user32.dll is Microsoft, path not needed 
MessageBox(new IntPtr(0), "Test", "Test Dialog", 0); 
+1

Le type demandait clairement une simple 'Ajouter une référence'. Réponse pourquoi iriez-vous et leur lanceriez-vous cela? Pour un nouveau développeur, Extern et DllImport sont plutôt avancés. – TheMonkeyMan

+6

Ce sont des moyens "faciles" communs DllImport est super facile, il y a des façons beaucoup plus avancées de faire ce FYI. –

2

Je suis en retard à la fête ici, mais je laisse cette réponse pour quelqu'un qui tire ses cheveux comme moi. Donc, fondamentalement, je n'ai pas eu le luxe de VS IDE face à ce problème. J'essayais de compiler le code via cmdline en utilisant csc. Pour référencer une DLL, ajoutez simplement l'indicateur de compilation/r: PathToDll/NameOfTheDll à csc.

La commande ressemblerait

csc/r: PathToDll/NameOfTheDll/out: OutputExeName FileWhichIsReferencingTheDll.cs

Dans FileWhichIsReferencingTheDll.cs ajouter using namespace AppropriateNameSpace; pour accéder aux fonctions (en appelant class.functionName si statique ou en créant un objet de la classe et en invoquant la fonction sur l'objet).