반응형
* VBNET 동적으로 DLL 로드 하여 그 안에 포함된 Form 과 클래스 함수 사용 예제...
테스트 DLL 위치는 위와 같이 그냥 C:\\ 에 놔두었는데 위치는 사용자 맘대로 두어도 괜찮겠습니다.
나중에 소스코드에서 DLL 로드 위치를 사용자가 Dll 이 있는 위치로 지정 하면 되겠습니다.
위의 테스트 DLL 은 C# 으로 만들어진 클래스 라이브러리 이며, VBNET 과 C# 은 닷넷 프레임 워크 기반
으로 하는 언어로 둘이 호환성은 아주 좋습니다. VBNET 으로 만들어진 DLL 이나 C# 으로 만들어진 DLL
이나 상관이 없으므로 기존 C# 으로 만들어진 테스트 DLL 을 사용 하였습니다.
전체 소스 코드
Form1.vb
Public Class Form1
Dim ab As System.Reflection.Assembly
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
Dim ofd As OpenFileDialog = New OpenFileDialog()
'DLL 파일만 열 수 있게끔...
ofd.Filter = "Dll File (*.dll) | *.dll"
If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
'선택된 dll 파일 표시...
label1.Text = ofd.FileName
'동적 dll 로드
ab = System.Reflection.Assembly.LoadFile("C:\ClassLibrary1.dll")
End If
End Sub
Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
'폼 불러오기...
'파일이 존재 하지 않으면...
If Not System.IO.File.Exists(label1.Text) Then Return
'Form
If (Not ab Is Nothing) Then
Dim tp() As Type = ab.GetExportedTypes()
If (tp.Length > 0) Then
For Each t As Type In tp
'Form 이름 찾기
If (t.Name = "Form1") Then
'객체화
Dim ob As Object = Activator.CreateInstance(t)
'폼 객체로 변환...
Dim f As Form = CType(ob, Form)
'폼 실행...
f.Show()
End If
Next
End If
End If
End Sub
Private Sub button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button3.Click
'클래스 불러오기...
'파일이 존재 하지 않으면...
If Not System.IO.File.Exists(label1.Text) Then Return
'클래스 찾기
If (Not ab Is Nothing) Then
Dim tp() As Type = ab.GetExportedTypes()
If (tp.Length > 0) Then
For Each t As Type In tp
'클래스 이름 찾기
If (t.Name = "Class1") Then
'객체화
Dim ob As Object = Activator.CreateInstance(t)
'클래스 함수 얻어 오기...
Dim mt As System.Reflection.MethodInfo = t.GetMethod("Test")
'MethodInfo 인보크 전달인자 : 객체화된 클래스, 클래스 함수 전달인자 값
'클래스 함수 리턴값 받아오기...
'첫번째 방식...
'함수 전달 인자 값 셋팅...
'Dim obValue(1) As Object
'obValue(0) = 200
'obValue(1) = 300
'Dim vReturn As Object = mt.Invoke(ob, obValue)
'두번째 방식...
Dim vReturn As Object = mt.Invoke(ob, New Object() {299, 300})
MessageBox.Show(vReturn.ToString())
End If
Next
End If
End If
End Sub
End Class
* 폼 불러오기
* 클래스 함수 불러오기
* 예제 결과 화면
↓↓↓아래는C#으로클래스라이브러리(DLL)만드는방법과위와같이동적으로DLL호출하는방법
https://kdsoft-zeros.tistory.com/61
반응형
'VB.NET Programming' 카테고리의 다른 글
[VBNET] File 사용 가능 여부 체크 (0) | 2019.10.26 |
---|---|
[VBNET] XML File Write & Read 예제 (0) | 2019.10.24 |
[VBNET] Folder Copy 폴더 복사 예제 (0) | 2019.10.19 |
[VBNET] File CheckSum 예제 (MD5 Hash) (0) | 2019.10.17 |
[VBNET] Log File - 로그 파일 작성 예제 (0) | 2019.10.15 |