Typ einer DLL umwandeln

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Typ einer DLL umwandeln

    Hallo Leute und danke für's reinschauen...

    Kann mir jemand bei meinem Problem helfen?:

    ich habe eine DLL, die von einem Hauptprogramm gestartet wird:

    C#-Quellcode

    1. var dll = Assembly.Load(@"xxxxx").GetType("jcUserApp.jcUserApp").GetConstructor(new Type[] { typeof(object) }).Invoke(new object[] { this });


    Die DLL wird gestartet und landet der Aufruf landet im Konstruktor der DLL:

    C#-Quellcode

    1. public jcUserApp(object gl)
    2. {
    3. var tmp = gl.GetType();
    4. }


    Soweit so gut. Jetzt ist es ein Objekt. Ich kann kaum damit was machen, solange, bis ich es nicht konvertiere in richtigen Typ von Hauptprogramm.Classe die ich der DLL mitgegeben hab...

    Kennt jemand eine Möglichkeit es so zu Konvertieren, dass ich keine Abhängigkeit der DLL von Hauptprogramm einbauen muss? Weil das Hauptprogramm schon abhängig von der DLL ist. Doppelt geht ja nicht...

    Vielleicht irgend wie mir Reflection oder sowas...

    Danke im Voraus...
    @EugenIS Ist das eine native DLL?
    Dann müsstest Du einen Wrapper drum herum schreiben.
    Falls das eine .NET-Assembly ist, müsstest Du ein .NET-Interface haben, damit Du auch die Prozeduren in der DLL ansprechen kannst.
    Zieh die DLL mal auf den IlSpy, der sagt Dir, ob es eine Assembly ist oder nicht.
    github.com/icsharpcode/ILSpy/releases
    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!
    Hi, die DLL ist von mir... Ich wollte einfach mein Programm etwas splitten... Das heißt ich kenne die Methoden und Funktionen von der DLL... Deswegen hab ich ja auch geschrieben, dass die DLL vom Hauptprogramm gestartet wird, und bei der DLL kann ich einen Objekt mitgeben. Aber ich möchte ein Objekt von Typ Hauptprogramm.ClasseXY in der DLL richtig einsetzten... Mit einem Objekt kann ich das nicht...

    EugenIS schrieb:

    die DLL ist von mir.
    Dann kannst Du den Assembly.Load-Teil vollständig weglasssen.
    Es gibt zwei Möglichkeiten: Du fügst die DLL dem Hauptprogramm als Verweis hinzu, dann den Namespace importieren, instanziieren und feddich.
    Oder
    Du machst aud dem Projekt Hauptprogramm und dem Projekt DLL eine Projektmappe und fügst dem Hauptprogramm das DLL-Projekt (nicht aber die DLL) als Verweis hinzu.
    Dann den Namespace importieren, instanziieren und feddich.
    Zu empfehlen ist letzteres, denn dann kannst Du durch die DLL debuggen und sie testen.
    Außerdem wird die Projektmappe beim Wechsel zwischen Debug und Release sowie x86, x64, AnyCPU vollständig umgeschaltet.
    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!
    Es ist alles richtig was du sagst, so könnte man es machen. Aber es läuft an meiner ursprünglichen Frage total vorbei.

    Du fügst die DLL dem Hauptprogramm als Verweis hinzu, dann den Namespace importieren, instanziieren und feddich.OderDu machst aud dem Projekt Hauptprogramm und dem Projekt DLL eine Projektmappe und fügst dem Hauptprogramm das DLL-Projekt (nicht aber die DLL) als Verweis hinzu.


    Kommt nicht in Frage. Dann mach ich ja mein Hauptprogramm von der DLL total abhängig. Das Will ich nicht.

    Egal, irgend wie komme ich da selbst nicht so richtig auf die Lösung...

    EugenIS schrieb:

    Dann mach ich ja mein Hauptprogramm von der DLL total abhängig

    Naja, was willst du sonst?
    Was bedeutet es für dich, dass das Hauptprogramm nicht "total von der DLL abhängig ist"?

    Versuchst du ein PlugIn-System zu bauen?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    EugenIS schrieb:

    Kommt nicht in Frage.
    Was @Niko Ortner meint:

    RodFromGermany schrieb:

    Falls das eine .NET-Assembly ist, müsstest Du ein .NET-Interface haben, damit Du auch die Prozeduren in der DLL ansprechen kannst.
    Oder mit anderen Worten:
    Was ganz genau willst Du eigentlich?
    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!