DLL mit C# Express erstellen und einbinden



  • Hallo,
    ich habe mal wieder eine Frage an die Fachwelt.

    Ich möchte mit meinem Visual Studio Express C# eine DLL erstellen.

    In dieser DLL möchte ich einige Funktionen auslagern.

    Wie erstelle ich diese DLL / geht es überhaupt in der Express Version.



  • File->New->Project->Class Library



  • Super klappt... habe auch eine geschrieben.

    Nun möchte ich sie einbinden,aber mir fehlt der namesspace.

    der sollte üblicherweise :

    using System.Runtime.InteropServices;

    sein.

    Aber ich finde ihn nicht als Verweis.

    Ich habe FrameNetwork 4



  • marccore schrieb:

    using System.Runtime.InteropServices;

    wird nicht benötigt.

    Einfach eine Referenz in deinem Projekt hinzufügen und fertig. Rechtsklick auf Projekt->Add Reference->Tab Projects->Projektt auswählen, fertig.



  • Super der Verweis hat geklappt..... so sieht meine Text DLL aus:
    Die Frage ist wie binde ich sie in mein Programm ein.
    Also die Class und die Methode sind bekannt in meinem Programm....
    nur wie kann ich auf Sie zugreifen.. finde leider keine Hilfe dazu im Netz

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace TestDLL
    {
    public class Class1
    {
    int test(int x, int y)
    {
    int output;
    output = x * y;
    return output;

    }

    }
    }



  • Indem du in deinem Programm eine Instanz der Klasse Class1 erstellst.



  • Wo lernen die Leute sowas nur immer wieder? 😕

    marccore schrieb:

    int test(int x, int y)
    {
    	int output;
    	output = x * y;
    	return output;
    }
    

    -> return x*y;



  • Deine Verbesserung des Codes wird marccore aber bei seinem Problem nicht helfen.



  • Leute es war nur eine Testmethode.... mir war eigentlich völlig egal was drin steht.... was ich wissen wollten wie ich von meine Programm nun auf die DLL zugreifen kann.



  • inflames2k schrieb:

    Deine Verbesserung des Codes wird marccore aber bei seinem Problem nicht helfen.

    👍



  • inflames2k schrieb:

    Indem du in deinem Programm eine Instanz der Klasse Class1 erstellst.

    Also mal dazu ich bin absoluter Anfänger, bewege mich eher im Bereich der Hardware programmierung.

    Wie ich eine Instanz eine Klasse mach weiß ich, aber ich kriege es für die DLL nicht hin.



  • Du musst natürlich auch den Namespace einbinden mit

    using Dein.NameSpace;
    

    oder die Klasse voll qualifiziert nutzen:

    Dein.NameSpace.DeineKlasse a = new Dein.NameSpace.DeineKlasse();
    


  • Also ist habe es jetzt so gemacht:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using TestDLL;
    
    namespace DLL_Aufruf
    {
        public partial class fmDLL : Form
        {
            public fmDLL()
            {
                InitializeComponent();
    
            }
    
            private void buEINLESEN_Click(object sender, EventArgs e)
            {
    
               TestDLL.DLLClass dllclass = new TestDLL.DLLClass();
    
            }
        }
    }
    

    Aber ich kriege es nicht hin die Methode test aufzurufen.

    Hier ist die DLL:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace TestDLL
    {
        public static class DLLClass
        {
            int test(int x, int y)
            {
                int output;
                output = x * y;
                return output;
    
            }
    
        }
    }
    


  • Tut mir wirklich leid, aber du solltest dich wirklich intensiver mit der Materie beschäftigen. Lies in einem Buch und arbeite das durch, mach ein Tutorial. Dir fehlen einfach zu viele grundlegende Dinge.

    Weißt du was eine Instanz ist? Weißt du was Membervariablen oder öffentliche Methoden sind? Wie man darauf zugreift? Was "static" bedeutet? Wenn du das beantworten kannst, wirst du die Lösung selber finden.



  • Ja ich wei was eine Instanz ist und ja ich weiß auch was static ist.... habe auch schon Bücher gelesen.

    Und nein das static war nicht absichtlich. Ich lerne halt in dem ich Bücher lese und fertigen Code auseinader pflücke und alles Teste.

    Ist aber keine Antwort



  • marccore schrieb:

    Und nein das static war nicht absichtlich.

    Und, hast du das static dann entfernt und nochmals ausprobiert?

    TestDLL.DLLClass dllclass = new TestDLL.DLLClass();
    dllclass.test(1,2);
    

    Sollte wenn die Klasse nicht static ist auch klappen.

    Oder mit einer static-class und einem static member:

    TestDLL.test(1,2);
    

    In .Net können Klassen aus .Net-DLLs exakt so verwendet werden, als wären sie in der lokalen Assembly. Einzig die Referenz auf das DLL-Projekt ist hinzuzufügen. Ansonsten gibt es keinerlei unterschied. Man kann es sogar ins extrem Treiben in dem man eine C#-DLL einen VB-Entwickler gibt, dieser von einer der DLL-Klassen ableitet (geht ebenso ohne Probleme) und man wiederum seine VB-DLL mit dieser abgeleiteten Klasse nutzt.

    marccore schrieb:

    Leute es war nur eine Testmethode.... mir war eigentlich völlig egal was drin steht...

    Man versucht auch immer noch auf Probleme hinzuweisen, die man nebenher bemerkt. Häufig kann man selbst aus solchen Testmethoden Rückschlüsse auf den Programmierstil ziehen. Und geändert hast du es ja dennoch nicht. Die Kritik zu der Funktion solltest du dir auch verinnerlichen.



  • marccore schrieb:

    nur wie kann ich auf Sie zugreifen.. finde leider keine Hilfe dazu im Netz

    Weil es keinen Unterschied macht, ob eine lokale Klasse oder eine Klasse aus einer .NET-DLL verwendet wird (Sofern die Referenz auf die DLL hinzugefügt wurde). Man beschreibt in der Regel nichts, wenn es nichts zu beschreiben gibt.



  • Ja ich lerne ja auch immer gut und gerne aus solchen Verbesserungen,
    nur ich kann nicht so hämische Kommentare vertragen.

    Ja als mein Code sah an Anfang genau so aus.

    Also die DLL war ohne static

    und der Aufruf im meinem Programm war:

    TestDLL.DLLClass dllclass = new TestDLL.DLLClass();
    dllclass.test(1,2);

    Aber er sagt mir das die Methode test nicht bekannt ist.


  • Administrator

    Du hast eine Frage nicht beantwortet: Weisst du was öffentliche Methoden sind?
    Oder ich frage mal etwas direkter: Von wem alles ist die Methode test in DLLClass sichtbar?

    Grüssli



  • marccore schrieb:

    [...]nur ich kann nicht so hämische Kommentare vertragen.[...]

    Das war kein hämischer Kommentar, sondern eine Einschätzung deiner Fähigkeiten aus meiner Sicht.

    Dein Problem sollte, sofern du alle hier im Thread genannten Punkte umgesetzt hast, keines mehr sein. Und da wir uns dein Projekt nicht ansehen können, benötigen wir Details.

    Gib uns mal einen Abris über deine Projektstruktur (Welche Dlls? Welche Klassen? Wo befinden sich diese? etc.)


Log in to reply