반응형
* 동적으로 DLL 로드 하여 그 안에 포함된 Form 과 클래스 함수 사용 예제...
시작 하기에 앞서 테스트 DLL 만들기...
그대로 ClassLibrary1 을 사용 하여 만들어서 DLL 안에 내용은 아래의 그림과 같이
폼 하나 클래스 하나를 만들어 보았습니다. 클래스 안에는 테스트 하는 함수 하나를 만들었습니다.
이제 테스트 DLL 도 만들었고 준비도 다 되었으니 동적으로 DLL 을 로드 하여 저 안에 있는 클래스 함수
와 폼을 사용 해 보도록 하겠습니다.
테스트 DLL 위치는 위와 같이 그냥 C:\\ 에 놔두었는데 위치는 사용자 맘대로 두어도 괜찮겠습니다.
나중에 소스코드에서 DLL 로드 위치를 사용자가 Dll 이 있는 위치로 지정 하면 되겠습니다.
전체 소스 코드
Form1.cs
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;
namespace CSharp_동적Dll
{
public partial class Form1 : Form
{
System.Reflection.Assembly ab;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
//DLL 파일만 열수 있게끔...
ofd.Filter = "Dll File (*.dll) | *.dll";
if (ofd.ShowDialog() == DialogResult.OK)
{
//선택된 dll 파일 표시...
label1.Text = ofd.FileName;
//동적 dll 로드
ab = System.Reflection.Assembly.LoadFile("C:\\ClassLibrary1.dll");
}
}
private void button2_Click(object sender, EventArgs e)
{
//파일이 존재 하지 않으면...
if (!System.IO.File.Exists(label1.Text)) return;
//form
if (ab != null)
{
Type[] tp = ab.GetExportedTypes();
if (tp.Length > 0)
{
foreach (Type t in tp)
{
//Form 이름 Form1
if (t.Name == "Form1")
{
//객체화
object ob = Activator.CreateInstance(t);
//폼 객체로 변환
Form f = ob as Form;
f.Show();
}
}
}
}
}
private void button3_Click(object sender, EventArgs e)
{
//파일이 존재 하지 않으면...
if (!System.IO.File.Exists(label1.Text)) return;
//class
if (ab != null)
{
Type[] tp = ab.GetExportedTypes();
if (tp.Length > 0)
{
foreach (Type t in tp)
{
//class 이름
if (t.Name == "Class1")
{
//클래스 함수 얻어 오기...
System.Reflection.MethodInfo mt = t.GetMethod("Test");
//객체화
object ob = Activator.CreateInstance(t);
//MethodInfo 인보크 (객체화 한 클래스, 함수 전달 인자)
//vReturn : 함수 결과값 리턴값...
var vReturn = mt.Invoke(ob, new object[] { 299, 300 });
//함수 결과값...
MessageBox.Show(vReturn.ToString());
}
}
}
}
}
}
}
* 폼 불러오기
* 클래스 함수 불러오기
* 예제 결과 화면
반응형
'C# Programming' 카테고리의 다른 글
[C#] File 사용 가능 여부 체크 (0) | 2019.10.25 |
---|---|
[C#] XML File Write & Read 예제 (0) | 2019.10.23 |
[C#] Folder Copy 폴더 복사 예제 (0) | 2019.10.18 |
[C#] File CheckSum 예제 (MD5 Checksum) (0) | 2019.10.16 |
[C#] Log File - 로그 작성 예제 (0) | 2019.10.14 |