メモ | Rock Around The Clock - 24時間とおしで、前後にゆれてください

Rock Around The Clock - 24時間とおしで、前後にゆれてください

Rock について語る!?(予定)
と、プログラミングもやっぱりねっ!


Imports System.Reflection

Public Class Form1

Private _FolderName As String
Private Property FolderName As String
Get
Return _FolderName
End Get
Set(value As String)
_FolderName = value
Me.TargetFrameworkVersion = _FolderName
End Set
End Property

Private _DLLName As String
Private Property DLLName As String
Get
Return _DLLName
End Get
Set(value As String)
_DLLName = value
DLLFullName = Me.FolderName & "\" & DLLName
End Set
End Property

Private Property DLLFullName As String

Private _TargetFrameworkVersion As String

Private Property TargetFrameworkVersion As String
Get
Return _TargetFrameworkVersion
End Get
Set(value As String)
Dim v As String() = Split(Me.FolderName, "\")
_TargetFrameworkVersion = v(v.Length - 1)
End Set
End Property


Private Function CreateDBData() As Boolean

Dim context As New FrameworkObjectEntities


stDLLName.Text = Me.DLLName
My.Application.DoEvents()

Dim _AssemblyName As New System.Reflection.AssemblyName
_AssemblyName.CodeBase = DLLFullName
Dim _Assembly As System.Reflection.Assembly
Try
_Assembly = AppDomain.CurrentDomain.Load(_AssemblyName)
Catch ex As BadImageFormatException
Return True
End Try
Dim asmName As String = _Assembly.FullName

'バージョンデータの登録
Dim _FVersion As New FrameworkVersion
_FVersion.Reference = _Assembly.FullName
_FVersion.Location = _Assembly.Location
_FVersion.Name = DLLName
_FVersion.FrameworkVersion1 = TargetFrameworkVersion
context.AddToFrameworkVersions(_FVersion)

context.SaveChanges()

Dim _Class As ClassTable
Dim _Ctor As CtorTable
Dim _CtorParameter As CtorParameterTable
Dim _Method As MethodTable
Dim _MethodParameter As MethodParameterTable
Dim _Property As PropertyTable

For Each expType In _Assembly.GetExportedTypes

'クラスデータの登録
_Class = New ClassTable
_Class.Classname = expType.FullName

stClassName.Text = expType.FullName
My.Application.DoEvents()

_Class.FrameworkID = _FVersion.ID
context.AddToClassTables(_Class)
context.SaveChanges()

'コンストラクタの登録

'Dim mConstrucor = From c In expType.GetMembers Where c.
MemberType = MemberTypes.Constructor Select c

For Each cInfo As ConstructorInfo In From c In expType.
GetMembers Where c.MemberType = MemberTypes.Constructor Select c

_Ctor = New CtorTable
_Ctor.ClassID = _Class.ClassID
context.AddToCtorTables(_Ctor)
context.SaveChanges()

'コンストラクタメンバの登録
For Each pi In cInfo.GetParameters
_CtorParameter = New CtorParameterTable
_CtorParameter.CtorID = _Ctor.CtorID
If IsNothing(pi.Name) Then
_CtorParameter.Name = "名前なし"
Else
_CtorParameter.Name = pi.Name
End If
_CtorParameter.Type = pi.ParameterType.Name

context.AddToCtorParameterTables(_CtorParameter)
context.SaveChanges()
Next
Next
'mConstrucor = Nothing

'メソッドの登録

'Dim mMethod = From m In expType.GetMembers Where m.
MemberType = MemberTypes.Method Select m

For Each mInfo As MethodInfo In From m In expType.GetMembers
Where m.MemberType = MemberTypes.Method Select m

_Method = New MethodTable
_Method.ClassID = _Class.ClassID
_Method.Name = mInfo.Name
_Method.ReturnType = mInfo.ReturnType.FullName
context.AddToMethodTables(_Method)
context.SaveChanges()

For Each pi In mInfo.GetParameters
_MethodParameter = New MethodParameterTable
_MethodParameter.MethodID = _Method.MethodID
If IsNothing(pi.Name) Then
_MethodParameter.Name = "名前なし"
Else
_MethodParameter.Name = pi.Name
End If

_MethodParameter.Type = pi.ParameterType.FullName
context.AddToMethodParameterTables(_MethodParameter)
context.SaveChanges()
Next
Next
'mMethod = Nothing


'プロパティの登録

'Dim mProperty = From m In expType.GetMembers Where m.
MemberType = MemberTypes.Property Select m

For Each pInfo As PropertyInfo In From m In expType.
GetMembers Where m.MemberType = MemberTypes.Property Select m

_Property = New PropertyTable
_Property.ClassID = _Class.ClassID
_Property.Name = pInfo.Name
_Property.Type = pInfo.PropertyType.FullName


context.AddToPropertyTables(_Property)
context.SaveChanges()
Next
'mProperty = Nothing

Next


Return True

End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click

FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.
ProgramFiles

If FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.
OK Then
Me.FolderName = FolderBrowserDialog1.SelectedPath
Label1.Text = Me.FolderName
Else
Exit Sub
End If


'DLL LIST

Dim d As New System.IO.DirectoryInfo(Label1.Text)
For Each x In d.GetFiles("*.DLL")
ListBox1.Items.Add(x.Name)
Next

Label2.Text = ListBox1.Items.Count.ToString & " Files"

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles
Button2.Click


If IsNothing(ListBox1.SelectedItem) Then
Exit Sub
End If

Cursor = Cursors.WaitCursor

For Each L In ListBox1.SelectedItems

Me.DLLName = L.ToString
Me.CreateDBData()

Next

stDLLName.Text = "ENDED"
stClassName.Text = ""

Cursor = Cursors.Default
End Sub
End Class