web-dev-qa-db-fra.com

Fonction d'appel depuis DLL?

Je suis nouveau sur C # et j'essaie d'apprendre à utiliser les DLL. J'essaie d'encapsuler mes objets dans une DLL, puis de l'utiliser dans mon programme.

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

J'essaie donc de compresser cela dans un DLL mais je ne peux pas, car le compilateur ne sait pas ce que SomeMethodInMyProgram () est.

Je voudrais l'utiliser comme:

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

Ajoutez le DLL via l'explorateur de solutions - clic droit sur les références -> ajoutez la référence puis "Parcourir" à votre DLL - alors il devrait être disponible.

26
Rob

Dépend de quel type de DLL. Est-ce intégré à .NET? s'il s'agit de code non managé, voici un exemple, sinon la réponse de Rob fonctionnera.

exemple de dll C++ non managé:

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);

Ensuite, chacun de ceux-ci est appelé comme ceci:

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

vous devez réellement charger le DLL dans votre application au moment de l'exécution, donc la partie dynamique de la DLL. Vous avez également besoin du fichier d'en-tête qui définit les fonctions du DLL pour 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 ...

4
thecoshman

Je suis en retard à la fête ici, mais je laisse cette réponse à quelqu'un qui se coiffe 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, il suffit d'ajouter l'indicateur du compilateur/r: PathToDll/NameOfTheDll vers csc.

La commande ressemblerait à

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

Dans FileWhichIsReferencingTheDll.cs ajoutez 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 appelant la fonction sur l'objet).

4
Abhi7950