본문 바로가기
카테고리 없음

[vb.net] 동적 DLL 폼 (Control) 불러오기 및 클래스 (Class) 함수 불러오기 예제

by IT HUB 2022. 10. 13.
728x90
반응형
Imports System.IO
 
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim SRA As System.Reflection.Assembly
        Dim FATabStrip As Object = Nothing
        Dim FATabStripItem As Object = Nothing
        Dim Class1 As Object = Nothing
        Dim mt As System.Reflection.MethodInfo = Nothing
        SRA = System.Reflection.Assembly.LoadFile(Path.Combine(Application.StartupPath, "TabStrip.dll"))
        Dim Types() As Type = SRA.GetExportedTypes()
        For Each T As Type In Types
            Select Case T.Name
                Case "FATabStrip"
                    FATabStrip = Activator.CreateInstance(T)
                Case "FATabStripItem"
                    FATabStripItem = Activator.CreateInstance(T)
                Case "Class1"   '// 동적 함수
                    Class1 = Activator.CreateInstance(T)
                    mt = T.GetMethod("Sum")
            End Select
        Next
        FATabStripItem.ResumeLayout(False)
        FATabStripItem.Title = "test"
        FATabStrip.Items.Add(FATabStripItem)
        FATabStrip.Dock = DockStyle.Fill
        Me.Controls.Add(FATabStrip)
        Dim vReturn As Object = mt.Invoke(Class1, New Object() {299300})
        MsgBox(vReturn.ToString())
    End Sub
End Class

 

 

부연설명:)

 
Imports System.Reflection
 

으로 임포트해주세요!Dim dllPath As String = DLL 경로

Dim a As Assembly = Assembly.LoadFile(dllPath)
Dim t As Type = a.GetType("루트네임스페이스.클래스이름"
Dim m As MethodInfo = t.GetMethod("함수이름")
DIm 리턴값 As 리턴형식=DirectCast(m.Invoke(NothingNew Object() {파라미터}), 리턴형식)

이제 DLL을 만드셔야하는데요! 클래스형식으로 프로젝트를 만듭니다.

솔루션 탐색기에서 My Project를 들어가셔서 루트네임스페이스를 설정해주세요!
위쪽의 파라미터에는 일반함수쓸때처럼 쓰시면 됩니다. (예 :Nothing, New Object(){Textbox1,Text,"String",134},String)
나와서 클래스이름을 설정해주시는데, 소스에서 최상단의 
 
Public Class 클래스이름
"클래스이름"을 설정해주세요!
함수이름은
Public Shared Function 함수이름(파라미터)
 
End Function
 
이렇게 해주심 됩니다!
예 : DLL파일
Public Class Class1
    Public Shared Function Test(a As String, b As Integer)
        MsgBox(a + b.ToString)
        Return "테스트"
    End Function
End Class
 
실행파일
Dim dllPath As String = "DLL.DLL"
Dim a As Assembly = Assembly.LoadFile(dllPath)
Dim t As Type = a.GetType("루트네임스페이스.Class1"
Dim m As MethodInfo = t.GetMethod("Test")
DIm 리턴값 As String=DirectCast(m.Invoke(NothingNew Object() {"문자열",1234}), String)

이렇게 됩니다!

 
 
반응형

댓글