Avatar billede knaldeglad Nybegynder
18. marts 2006 - 22:26 Der er 20 kommentarer og
1 løsning

loade en dll der indeholder en form i et program. hvordan ?

Hej Folkens...

Jeg vil gerne loade en dll der indeholder en form i mit program, hvor formen fra dllén bliver at se, med tilhørende funktionalitet...    me øøh  jeg ved ikke helt hvorledes.
Avatar billede dj_uncas Nybegynder
18. marts 2006 - 23:24 #1
Du kan vel bare referere til dll'en og så finde ding form? Bruger du Visual Studio? Så er det nemlig ikke så svært.
Avatar billede knaldeglad Nybegynder
18. marts 2006 - 23:41 #2
mener du referere  som i references i solution explorer ? njooee  men det er mere.... JEg har lavet en dll med en form i....  jeg vil gerne kalde denne dll fra min program, ogdemed få dlléns form at se...  det er mere det..  endvidere skal det ske dynamisk. dvs alle dller tilrådighed hvor der kigges....    tja...  ved ik om jeg beskriver det hele idt dumt...
Avatar billede dj_uncas Nybegynder
18. marts 2006 - 23:43 #3
Ikke helt, du manglede bare at nævne at din/dine dll'er skal loades dynamisk..

Det kan sikkert godt lade sig gøre, jeg har bare ikke prøvet det, så der må være nogen andre der kan tage over?
Avatar billede dj_uncas Nybegynder
18. marts 2006 - 23:47 #4
Et par hurtige links som måske har noget med sagen at gøre (har ikke lige læst dem grundigt):

AppDomains and Dynamic Loading
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp05162002.asp

Dynamic compilation
http://www.developerfusion.co.uk/show/4529/3/
Avatar billede arne_v Ekspert
19. marts 2006 - 01:33 #5
Form f = (Form)Assembly.Load("DinAssembly").CreateInstance("DinFormKlasse");
f.ShowDialog();

måske
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 09:56 #6
aha.. har lavet et simpelt forsøg...  her kommer koden. har indsat kode fra arnev, men den gir en fejl.

An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication19.exe
Additional information: Object reference not set to an instance of an object.

forslag ?

(ClassLibrary2.dll)
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace ClassLibrary2
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1 : System.Windows.Forms.Form
    {
        private System.ComponentModel.Container components = null;
       
        public Class1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        public int janus(int number)
        {
       
            return 20;
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.Size = new System.Drawing.Size(300,300);
            this.Text = "Class1";
        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Class1());
        }
    }
}
(WindowsApplication19)
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection;

//interface AMHA_plugin;
namespace WindowsApplication19
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();


            Form f = (Form)Assembly.LoadFrom("ClassLibrary2.dll").CreateInstance("Class1");
            f.ShowDialog();
            //Assembly MyAssembly = Assembly.LoadFrom("ClassLibrary2.dll");
            //Type t = MyAssembly.GetType("ClassLibrary2");
            //MethodInfo m = t.GetMethod("janus");
            //MethodInfo[] m1 = t.GetMethods();
            //Object o = Activator.CreateInstance(t);

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.Size = new System.Drawing.Size(300,300);
            this.Text = "Form1";
        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }
    }
}
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 10:06 #7
det er måske helt galt.....      er nok lidt grøn....
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 12:48 #8
Det er nok helt galt med en main i dll også....
Avatar billede arne_v Ekspert
19. marts 2006 - 16:04 #9
ligger ClassLibrary2.dll hvor den skal så WindowsApplication19.exe kan finde den ?
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 17:47 #10
sisi
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 17:50 #11
den ligger sammen med .exe, den fejler heller ikk eved assemby laod, men ved f.ShowDialog();
Avatar billede arne_v Ekspert
19. marts 2006 - 19:17 #12
jeg snork sover !

Form f = (Form)Assembly.LoadFrom("ClassLibrary2.dll").CreateInstance("ClassLibrary2.Class1");
f.ShowDialog();

det er fuldt klassenavn inkl. namespace
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 22:04 #13
og evt kan formen i dll filen blive vist på et panel eller noget på formen fra programmet monstro .?
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 22:06 #14
hov  en kommentar mangler....  det virker nu...  men det viser sig at formen fra dll filen blokerer for formen i programmet(.exe)dvs når dll formen lukkes, først da fremkommer formen fra programmet.... ?!
Avatar billede arne_v Ekspert
19. marts 2006 - 22:06 #15
aner det ikke - det er et rent GUI spørgsmål og har ikke noget at gøre med hvordan
man creater objektet

hvis du lavede:

Class1 c1 = new Class1();

kunne du så vise c1 på et panel ?
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 22:08 #16
ok ok sry.....  smid et svar arne v og  amnge tak for hjælpen.. :o)
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 22:12 #17
iøvrigt et smukt link du gav mig  mr uncas på det med dynamisk loadning..
Avatar billede arne_v Ekspert
19. marts 2006 - 22:13 #18
f.ShowDialog();

låser vist mens

f.Show();

ikke låser
Avatar billede arne_v Ekspert
19. marts 2006 - 22:14 #19
og et svar
Avatar billede knaldeglad Nybegynder
19. marts 2006 - 22:17 #20
nice tak..
Avatar billede dj_uncas Nybegynder
19. marts 2006 - 22:25 #21
det var så lidt med linket ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester