1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Objekt aus dll instanzieren mit C#

Discussion in 'Programmieren' started by Johnny2888, Feb 11, 2009.

Thread Status:
Not open for further replies.
  1. Johnny2888

    Johnny2888 Byte

    Hallo,

    ne kleine Anfängerfrage:

    Ich hab kapiert, wie man dlls erstellt und auf deren
    Methoden zugreift. Aber die Methoden sind
    im statischen Sinne.
    Kann man auch Objekte aus dll erzeugen?

    Beispiel: möchte ich eine WIndows-Form-Klasse als dll auslagern.
    Quasi sowas wie "Design.dll".
    Um diese Form wieder zu laden müsste ich ein Objekt
    erstellen.
     
  2. da_Ferdi

    da_Ferdi Halbes Megabyte

    Richtig. Einfach die Bibliothek referenzieren und dann eine neue Instanz der Form erstellen.
    So kannst du von jedem beliebigen Member einer als dll vorhandenen Klasse Instanzen erzeugen.
     
  3. Johnny2888

    Johnny2888 Byte

    danke.

    ...Und weil wir grad beim Thema sind: Sind die dlls zur Laufzeit schreibgeschützt?
    Ich meine wenn das Programm läuft, aber sie gerade nicht benutzt werden?

    Ich plane nämlich gerade einen Update-Mechanismus, dabei sollen die dlls überschrieben werden.
    Ich frage mich nun, wie ich das am besten mache.
     
  4. da_Ferdi

    da_Ferdi Halbes Megabyte

    Ja, sind sie. Du musst die Dll durch einen anderen Thread bzw. Prozess ersetzen lassen.
     
  5. kazhar

    kazhar Viertel Gigabyte

    kommt drauf an wie die bibliotheken eingebunden bzw gelinkt sind.

    wenn sie gelinkt sind wird die lib beim programmstart automatisch geöffnet und die exports eingebunden. beim programmende wird sie ebenfalls automatisch wieder entladen. da ist natürlich essig mit überschreiben.

    wenn du die lib dynamisch nach bedarf per hand mit LoadLibrary lädst, die exports per GetProcAddress manuell einbindest und später per FreeLibrary wieder entlädst kannst du die .dll überschreiben sobald alle handles zu der lib geschlossen sind - vorausgesetzt kein anderes programm nutzt sie grade und sie wird auch nicht von windows geschützt.
     
    Last edited: Feb 11, 2009
  6. Johnny2888

    Johnny2888 Byte

    thanks Kazhar!

    Ich werde das probieren, das hört sich gut an!
    Damit wären Echtzeit-Updates super machbar !

    Greetz
     
  7. Johnny2888

    Johnny2888 Byte

    @kazhar

    Nochmal kurz weg von der loadlibrary-Variante zurück zum Standardfall:

    Wenn die dlls mit include nur in ein paar Klassen eingebunden sind, sind sie dann trotzdem für die gesamte namespace-Laufzeit schreibgeschützt?

    Ich frage mich, ob sowas geht:
    1. Programmstart (ohne eingebundene dlls in der ersten Klasse) mit update-checker, updates installieren, wobei alte dlls überschrieben werden.
    2. Nächste Klasse wird aufgerufen und erst dort befinden sich die ersten dll Einbindungen und Zugriffe

    Würde das nicht funktionieren?
     
  8. kazhar

    kazhar Viertel Gigabyte

    keine ahnung wie und wann c# das einbinden genau macht :nixwissen
    müsste man mal ausprobieren...

    edit: du weist schon dass du dich da auf recht dünnem eis bewegst? kann sein dass der hack funktioniert, aber wenn er jetzt funktioniert hast du keine garantie dass er mit der nächsten/einer anderen .net version funktioniert.
    ich würde einfach einen "loader" schreiben, der die update geschichte übernimmt und nach getaner arbeit das eigentliche programm startet. siehe #4
     
    Last edited: Feb 12, 2009
Thread Status:
Not open for further replies.

Share This Page