Zentrales Modul in mehrere Projekte einbinden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    So, ich würde mal sagen jetzt erstellst du ein Beispielprojekt und ladest dieses hoch, dann wird sich das jemand ansehen.
    Zweite möglichkeit: Du eignest dir die Basics an.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,

    Du musst die Klasse auf jeden Fall deklarieren.
    Wenn deine Klasse keinen eigenen Konstruktor hat, wird immer der Default Konstruktor aufgerufen: Dim myClass as New EncryptDecrypt()
    btw. Hast Du noch nie eine Klasse erstellt, dort einen Konstruktor angelegt und sie dann durch instanzieren verwendet??? Kann ich kaum glauben....
    "Hier könnte Ihre Werbung stehen..."
    @MichaHo Jou.

    Peter329 schrieb:

    Was ist denn jetzt schon wieder falsch ?
    Auf Static / Const Member kannst Du per Klassennamen zugreifen, für die anderen musst Du eine Instanz erstellen.
    Diesen Fehler hatten wir bereits, Du musst natürlich den Compiler-Output durchlesen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also jetzt führt ihr mich hier aber ganz schön vor ! Ich darf noch mal an mein Problem erinnern:

    Ich habe ein Projekt Calendar

    Das Projekt enthält ein MODUL EncryptDecrypt

    In diesem Modul sind eine Reihe von Public Constants und Variables definiert, sowie rund ein Dutzend Funktionen.

    Im Project Calendar rufe ich diese Funktionen aus mehreren Forms auf.

    Das funktioniert PRIMA ... ohne Imports und Verweise und ohne jede Qualifizierung der Variablen und Funktionen mit einem Klassennamen.

    Das ist der IST Zustand.

    Jetzt würde ich gern die Funktionen von EncryptDecrypt PROJEKTÜBERGREIFEND verwenden.

    Dazu habe ich gefragt, wie man so etwas auslagern kann.

    Als Antwort habe ich erhalten, dass ich dazu eine DLL erstellen soll. Das MODUL muss dazu als KLASSE eingebunden werden.

    Das habe ich getan. Die DLL kompiliert auch problemlos.

    Nun ist die Frage, wie ich diese DLL EncryptDecryptLibin mein Projekt Calendareinbinde !

    Und die Ratschläge die ich dazu erhalten habe, verstehe ich prinzipiell nicht. Auch nach genauem Durchlesen muss ich sagen, dass das so auch wohl nicht zu verstehen ist. Und deshalb wäre es nett, wenn ihr mich nicht als blöd hinstellen würdet.

    Ich komme aus der Welt der Großrechner. Da ist das überhaupt kein Problem, Module in eine Zentralbibliothek auszulagern. Man kompiliert die Funktionen in eine Load Library, nimmt die Library mit in die Suchreihenfolge der Anwendung auf und schon kann man die Funktionen so aufrufen als wären sie lokal ! Eine derart triviale Aufgabe muss doch auch in der schönen neuen Welt der totalen Objektorientierung ohne Kopfstände zu lösen sein !

    Oder irre ich mich da ?

    LG
    Peter

    @MichaHo

    VB.NET-Quellcode

    1. Dim myClass As New EncryptDecrypt()


    Fehler BC30183 Das Schlüsselwort ist kein gültiger Bezeichner.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    Hallo @Peter329 keiner stellt dich als Blöd hin...
    Vielleicht wäre es hilfreich, dein Modul/Klasse/Dll mal hier anzuhängen, damit man Dir ein Beispeilprojekt erstellen kann...
    gerne auch eine Pseudo Dll falls Du die Funktionen nicht preis geben möchtest

    EDIT: myClass war nur ein Beispiel, das ist ja der Name der zu instanzierenden Klasse Dim clsEncryptDecrypt as new EncryptDecrypt() voraus gesetzt deine Klasse in deiner Dll heißt auch EnryptDecrypt, deswegen sagte ich ja, lade diese dll mal hoch, dann können wir genauer gucken
    "Hier könnte Ihre Werbung stehen..."

    Peter329 schrieb:

    Und die Ratschläge die ich dazu erhalten habe, verstehe ich prinzipiell nicht. Auch nach genauem Durchlesen muss ich sagen, dass das so auch wohl nicht zu verstehen ist. Und deshalb wäre es nett, wenn ihr mich nicht als blöd hinstellen würdet.

    Machen wir nicht, wenn du auf MEINE Postings eingehen würdest und diese beherzigen würdest hättest du dein Problem schon längst gelöst. Du solltest dir echt die Basics aneignen.

    Peter329 schrieb:

    Eine derart triviale Aufgabe muss doch auch in der schönen neuen Welt der totalen Objektorientierung ohne Kopfstände zu lösen sein !

    Überhaupt kein problem, aber wenn man Objektorientiert programmieren möchte, sollte man über objektorientierte programierung auch bescheid wissen, sonst kann es mitunter schwierig werden.
    Du musst mal lernen wie man Klassen erstellt, instanziert, verwendet. Nicht mehr, nicht weniger.

    Auf mein anraten hin ein Beispielprojekt hochzuladen hast du ja auch nicht reagiert, nimmst also ratschläge gar nicht erst an, willst hier aber auf der anderen Seite jammern. Verstehe ich nicht ganz.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,

    das ist alles keine Hexerei. Ich hab Dir ein kleines Beispielvideo gemacht:

    youtube.com/watch?v=nE4BG9L-bBA&feature=youtu.be

    Erstelle Dir eine Projekt vom Typ "ClassLibrary" oder "Klassenbibliothek". Diese DLL beinhaltet Deine Klassen. Nachdem die DLL fehlerfrei erstellt wurde, erhälst Du im Ausgabeverzeichnis die entsprechende Datei.

    Diese Datei (Assembly) kannst Du nun in Deine anderen Projekte importieren "Add reference" oder "Verweis hinzufügen". In dem aufpoppenden Dialog wählst Du die DLL. Wichtig ist, dass Du den Namespace in Deinen Programmen importierst. Nun kannst Du die Funktionen, welche in der DLL deklariert sind, in Deinen Programmen nutzen. Im Beispiel habe ich die Funktion "TransformString" als Shared markiert. Soll heissen, ich benötige keine Instanz der Klasse "ClassX" um diese Funktion zu nutzen.

    Wie zum Ende des Videos zu sehen ist, füge ich der DLL eine weitere Funktion hinzu und erstelle das Projekt erneut. Da das Hauptprogramm auf die DLL in ihrem Ausgabeverzeichnis zeigt, hast Du quasi die Möglichkeit "live" Änderungen an der DLL vorzunehmen (wenn man nicht so wie ich Tippfehler einbaut).

    Edit: Sorry für den OPTION STRICT OFF Code. Hab VB lange nicht mehr genutzt und hab die Option nicht aktiviert. Die Funktionen benötigen natürlich die Angabe eines Rückgabetype. Nix für ungut!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SpaceyX“ ()

    @Peter329 Was ist ein Modul im Sinne von Großrechner?
    Was ist ein Modul im Sinne von VB.NET?
    Und
    in C# gibt es keine Module, sondern statische Klassen, die es in VB.NET nicht gibt.
    Ganz identisch sind diese beiden nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also, erst mal herzlichen Dank für eure Kommentare.

    Nofear23m schrieb:

    wenn du auf MEINE Postings eingehen würdest


    Das ist halt das Problem, wenn man drei Antworten mit vier verschiedenen Lösungsansätzen erhält. Dann muss man sich einfach zunächst für einen Weg entscheiden und den auch konsequent verfolgen. Und erst wenn das nichts wird, dann greift man den nächsten Lösungsvorschlag auf. Trotzdem bin ich natürlich für jeden Vorschlag dankbar !

    MichaHo schrieb:

    myClass war nur ein Beispiel


    Tatsächlich lag der Syntax Fehler an dem Namen "myClass" ... wenn ich einen anderen Namen wähle, ist der Syntax Fehler zwar weg aber trotzdem werden die Variablen nicht richtig angesprochen. Diese Front lasse ich jetzt aber erst mal ruhen.

    SpaceyX schrieb:

    das ist alles keine Hexerei. Ich hab Dir ein kleines Beispielvideo gemacht:


    Das klingt sehr vielversprechend. Ich werde mir jetzt dieses Video in Ruhe zu Gemüte führen und zusehen, ob ich dann besser klar komme.

    RodFromGermany schrieb:

    Was ist ein Modul im Sinne von Großrechner?
    Was ist ein Modul im Sinne von VB.NET?


    Das ist sicher ein Problem, dass die Begriffswelten und auch die Techniken hier weit auseinander liegen. Auf dem Großrechner haben wir prozedurale Programmiersprachen. Da entspricht ein Load Module einer .exe Datei .... und eine dll dürfte in etwa einer Load LIbrary entsprechen. Klar, dass man diese Dinge nicht 1-1 aufeinander abbilden kann. Das will ich ja auch gar nicht.Ich möchte verstehen, wie man zentrale Funktionen unter VB verwalten kann. Und natürlich weiß ich, dass ich dazu einiges lernen muss. Deshalb bin ich ja auch hier im Forum unterwegs, weil eure Expertise halt unschlagbar ist.

    Jetzt schau ich mir das Video von @SpaceyX an ... :) also bis nachher ....

    LG
    Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    Peter329 schrieb:

    Also jetzt führt ihr mich hier aber ganz schön vor ! [...]
    Als Antwort habe ich erhalten, dass ich dazu eine DLL erstellen soll. Das MODUL muss dazu als KLASSE eingebunden werden.
    Wer hat dir diese Antwort gegeben?
    Ein Modul als Klasse einbinden? ist doch vollkommener Blödsinn - also ergibt schon von den Begriffen her ühaupt keinen Sinn.

    Ein Modul ist ein Modul, und keine Klasse. Und einbinden tut man Assemblies (alias Dlls), aber keine Module, oder Klassen. Und "Modul als Klasse einbinden" ?( ?( ;( ??? - kein Wunder, dass solch dich nicht weiter bringt.
    Wenn dein Projekt mit eim Modul funktioniert hat, dann mach da nicht auf einmal eine Klasse draus, weil bei Klasse ticken die Member etwas anders (wie du gemerkt hast).
    Haste eiglich mein Video auch mal angeguckt?

    Übrigens, ein beliebter Fehler bei Modulen ist, zu vergessen, sie Public zu deklarieren. Weil wenn nicht Public kannste einbinden (die Dll einbinden, die das Modul enthält, um genau zu sein) soviel wie wolle - sie werden im Ziel-Projekt nicht sichtbar, die nicht-Public Module.
    Ich werfe Zentrales Modul in mehrere Projekte einbinden
    nochmal ins Rennen.
    Das Ergebnis entspricht der Threadüberschrift und das ganze dauert keine 3 Minuten. :whistling:
    jo, externe Dateien als Verknüpfung einbinden geht auch.
    Ich bin da nur von abgekommen, weil die Sources solcher Projekte konnte ich nicht als lauffähige Einheit verzippen - und hatte somit keine Möglichkeit, brauchbare Backups zu erstellen.
    Aber vlt. hätte ich mir nur ein anneres Backup-Tool schreiben sollen...
    @FormFollowsFunction Da mittlerweile sehr viele mit einer Quellcodeverwaltung arbeiten sehe ich hier einige Probleme.
    Ich z.b. Entwickle fast nichts mehr ohne das ich TVS verwende.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##