DLL mit C# Express erstellen und einbinden



  • 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.)



  • Sorry ich meinte nicht dich mit dem hämischen Kommentar.

    qweasdyxcgerwtwret schrieb:

    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;

    Aber ich werde es umsetzten



  • Also es ist sehr einfach..
    Ich wollte mit dem Programm nur einmal den Testzugriff auf eine DLL machen.
    
    Ich möchte in meinem Programm:
    
    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();
    
                }
            }    
    }
    

    auf die Methode test von Klasse DLLClass zugreifen:

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

    Ich kriege aber immer den Fehler:

    Fehler 1 "TestDLL.DLLClass" enthält keine Definition für "test", und es konnte keine Erweiterungsmethode "test" gefunden werden, die ein erstes Argument vom Typ "TestDLL.DLLClass" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Tei644\documents\visual studio 2010\Projects\DLL_Aufruf\DLL_Aufruf\Form1.cs 27 25 DLL_Aufruf



  • Zum Wiederholen:

    Dravere schrieb:

    Du hast eine Frage nicht beantwortet: Weisst du was öffentliche Methoden sind?



  • Ja weiß ich trotz:

    public class DLLClass
        {
            public int test(int x, int y)
            {             
              return x * y;
            }
    
        }
    

    ist sie nicht bekannt.


Anmelden zum Antworten