Announcement

Collapse
No announcement yet.

Dll schreiben und auf deren Funktionen zugreifen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dll schreiben und auf deren Funktionen zugreifen

    Hallo, <br>
    ich will eine Dll schreiben um auf ihre Funktionen von einem Programm aus zugreifen. Wie müssen die Deklarationen in der Dll aussehen? Bzw. wie sollte eine Dll aufgebaut sein?<br>
    Mit DllImport ist der Zugriff ja kein Problem.<br>
    Danke!

  • #2
    Hallo,

    mit welcher Entwicklungsumgebung und in welcher Sprache soll diese DLL geschrieben werden? Wenn das in VB.NET oder C# erfolgen soll, ist der Visual Studio .NET-Experte für eine <i>Klassenbibliothek</i> der einfachste Weg (wenn die wenigen Zeilen nicht von Hand getippt werden sollen). Erfolgt der Zugriff von einer anderen .NET-Anwendung heraus, ist DllImport nicht notwendig (denn DllImport verbindet nur eine "alte" native DLL (unmangaged code) mit der CLR (managed code)).

    Eine C#-Klassenbibliothek (DLL) könnte zum Beispiel so aussehen:
    <pre>
    using System;
    // neu
    using System.Threading;

    namespace CSharpObj
    {
    /// <summary>
    /// .NET-Objekt soll von Delphi 6 aus aufgerufen werden
    /// </summary>
    public class OSNetObj
    {
    public OSNetObj()
    {
    //
    // TODO: Fügen Sie hier die Konstruktorlogik hinzu
    //
    }

    /// <summary>
    /// Liefert den Hash-Wert des internen .NET-Threads zurück
    /// </summary>
    public int OSThreadID()
    {
    return Thread.CurrentThread.GetHashCode();
    }

    /// <summary>
    /// Liefert über .NET-Klassen den HostNamen zurück
    /// </summary>
    public string OSHostName()
    {
    return System.Net.Dns.GetHostName();
    }

    }
    }
    </pre>
    Da .NET alle Funktionen der Klasse direkt in den Metadaten der Assembly beschreibt, muss man keine sonstigen Vorbereitungen treffen

    Comment


    • #3
      Hallo,<br>
      Danke fuer die Antwort. Mit VisualStudio.NET Beta2.<br>
      Ich will eine C# Komponenete schreiben und mit C++ von einer Borland Anwendung darauf zugreifen.<br>
      1. Welche moeglichkeiten gibt es um Kompos in C# zu erstellen?(dlls oder)<br>
      2. Wie erfolgt der Zugriff von C++ Bzw. C#, Klassenname.Methode oder anders

      Comment


      • #4
        Hallo,<br>
        ich bekomme die Fehlermeldung "Erkennungszeichen erwartet" beim einbinden der dll bzw. "namespace konnte nicht gefunden werden".<br>
        Hm..

        Comment


        • #5
          Hallo,

          in der aktuellen Ausgabe vom <b>dot.net magazin</b> beschreibe ich in 3 Beispielprojekten die gegenseite Anbindung von .NET mit Delphi 6 (in beiden Richtungen). Um von Delphi 6 aus auf eine .NET-Klasse zugreifen zu können, ist folgendes notwendig:<br>
          a) .NET: Klassenbibliothek (DLL) erstellen <br>
          b) .NET-Tool REGASM.EXE: Typbibliothek für die .NET Klasse erstellen<br>
          c) Delphi 6: Zugriff über CreateOleObject (also auf dem COM-Weg)

          Dieser COM-Weg sollte auch unter C++ zur Verfügung stehen

          Comment


          • #6
            Hallo,<br>
            werde mir die Beispiele anschauen. Herzlichen Dank fuer die schnelle Antworten und schoenes wochenende.<br>
            Gruß Kost

            Comment


            • #7
              Hallo,<br>
              noch was, wenn ich eine dll (mit dem Asi in C#) erzeuge und sie ueber ein C# programm ansprechen will, wird der Namespace nicht gefunden.<br>
              Das bedeutet das Programm kennt die dll nicht, obwohl beides in der gleichen Mappe ist. Weshalb nicht? Bzw. wie mache ich dem Programm die dll bekannt?
              Danke im Vorfel

              Comment


              • #8
                Hallo,

                in der Projektmappe gibt es den Ordner <b>Verweise</b>. Mit einem rechten Mausklick darauf kann der Menüeintrag <i>Verweis hinzufügen</i> aufgerufen werden - Visual Studio .NET blendet dann den Dialog <i>Verweis hinzufügen</i> ein, so dass man die eigene Klassenbibliothek (DLL) auswählen kann. Über die <b>using</b>-Anwendung wird der Namespace dann im Sourcecode bekanntgemacht

                Comment


                • #9
                  Hallo,<br>
                  klappt alles, vielen Dank

                  Comment

                  Working...
                  X