improvements of load driver file

master
xieguigang 5 years ago
parent ad6e2becb9
commit 64e750b2f0

@ -1,4 +1,6 @@
Namespace Interpreter.Expressions
Imports Microsoft.VisualBasic.Language
Namespace Interpreter.Expressions
Public Class ImportDataDriver : Inherits KeywordExpression
@ -15,7 +17,28 @@
End Sub
Public Overrides Function Exec(context As ExecutableContext) As Object
Throw New NotImplementedException()
If dllName.FileExists Then
Return dllName
End If
Dim fileName As Value(Of String) = ""
Dim driver As String = dllName
If driver.ExtensionSuffix <> "dll" Then
driver = $"{driver}.dll"
End If
For Each dir As String In {App.HOME, App.CurrentDirectory}
If (fileName = $"{dir}/{driver}").FileExists Then
Return fileName
End If
Next
Throw New BadImageFormatException($"driver module '{driver}' not found!")
End Function
Public Overrides Function ToString() As String
Return $"load driver: {dllName}"
End Function
End Class
End Namespace

@ -73,7 +73,7 @@ Namespace Interpreter.Query
Dim registry As Registry = globalEnv.registry
For Each name As ImportDataDriver In attaches
Call registry.Register(driver:=name.dllName)
Call registry.Register(driverDll:=name.Exec(context))
Next
End Sub

@ -50,9 +50,8 @@ Namespace Runtime
ReadOnly drivers As New Dictionary(Of String, IDriverLoader)
Public Sub Register(driver As String)
Dim dll As String = getDllFile(driver)
Dim assembly As Assembly = Assembly.LoadFile(dll)
Public Sub Register(driverDll As String)
Dim assembly As Assembly = Assembly.LoadFile(driverDll)
For Each type As Type In From m As Type
In assembly.GetTypes
@ -68,26 +67,6 @@ Namespace Runtime
Next
End Sub
Private Function getDllFile(driver As String) As String
If driver.FileExists Then
Return driver
End If
Dim fileName As Value(Of String) = ""
If driver.ExtensionSuffix <> "dll" Then
driver = $"{driver}.dll"
End If
For Each dir As String In {App.HOME, App.CurrentDirectory}
If (fileName = $"{dir}/{driver}").FileExists Then
Return fileName
End If
Next
Throw New BadImageFormatException($"driver module '{driver}' not found!")
End Function
Public Function GetTypeCodeName(type As Type) As String
Select Case type
Case GetType(Integer) : Return "i32"

Loading…
Cancel
Save