wake-up-neo.com

Funktion von DLL aufrufen?

Ich bin neu in C # und versuche, den Umgang mit DLLs zu erlernen. Ich versuche, meine Objekte in eine DLL zu packen und sie dann in meinem Programm zu verwenden.

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

Also versuche ich, dies in eine DLL) zu packen, aber ich kann es nicht, weil der Compiler nicht weiß, was SomeMethodInMyProgram () ist.

Ich würde es gerne so benutzen:

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

Fügen Sie die DLL über den Lösungs-Explorer hinzu - klicken Sie mit der rechten Maustaste auf Referenzen -> fügen Sie Referenz hinzu und klicken Sie dann auf "Durchsuchen", um Ihre DLL - dann sollte sie verfügbar sein.

26
Rob

Hängt davon ab, welche Art von DLL. Ist das in .NET eingebaut? Wenn es sich um nicht verwalteten Code handelt, ist hier ein Beispiel, ansonsten funktioniert die Antwort von Rob.

Nicht verwaltetes C++ - DLL-Beispiel:

using System;
using System.Runtime.InteropServices;

Möglicherweise müssen Sie DllImport verwenden

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

oder

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

Dann heißt jeder von denen so:

// 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

sie müssen das DLL zur Laufzeit tatsächlich in Ihre Anwendung laden, also den dynamischen Teil der DLL. Sie benötigen auch die Header-Datei, die definiert, welche Funktionen in der DLL enthalten sind, damit Ihre Kompilierung weiß, welche Funktionen definiert wurden. Mein Wissen hier basiert auf C++, so wie dies für C # funktioniert, bin ich nicht sicher, aber es wird so etwas sein ...

4
thecoshman

Ich bin zu spät zur Party hier, lasse diese Antwort aber für jemanden, der wie ich seine Haare ausreißt. Im Grunde hatte ich nicht den Luxus von VS IDE), als ich vor diesem Problem stand. Ich habe versucht, den Code über cmdline mit csc zu kompilieren. Um auf eine DLL zu verweisen, fügen Sie einfach das Compiler-Flag hinzu/r: PathToDll/NameOfTheDll nach csc.

Der Befehl würde so aussehen

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

Fügen Sie in FileWhichIsReferencingTheDll.csusing namespace AppropriateNameSpace; Hinzu, um auf die Funktionen zuzugreifen (durch Aufrufen von class.functionName, falls statisch, oder durch Erstellen eines Objekts der Klasse und Aufrufen der Funktion für das Objekt).

4
Abhi7950