자료실

부자는 돈을 써서 시간을 아끼지만 가난한 사람은 시간을 써서 돈을 아낀다

vb.net

IT HUB를 찾아주셔서 감사합니다.

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

페이지 정보

profile_image
작성자 하나를하더라도최선을
댓글 0건 조회 3,698회 작성일 22-10-13 15:17

본문

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)

이렇게 됩니다!


 

댓글목록

등록된 댓글이 없습니다.