반응형

* 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

 

[C#] 동적 DLL 폼 (From) 불러오기 또는 클래스 (Class) 함수 불러오기 예제

* 동적으로 DLL 로드 하여 그 안에 포함된 Form 과 클래스 함수 사용 예제... 시작 하기에 앞서 테스트 DLL 만들기... 그대로 ClassLibrary1 을 사용 하여 만들어서 DLL 안에 내용은 아래의 그림과 같이 폼 하나..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts