⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pluginservice.vb

📁 vc实现串口收发短信
💻 VB
字号:
'//////////////////////////////////////////////////////////////////////////
'// Use at your own risk                                                 //
'// www.hesicong.net                                                     //
'// Copyright Dreamworld. You can use this program freely but no in      //
'// commerial use without my permission.                                 //
'// Authoer: hesicong                                                    //
'// Date: 2007-2-25                                                      //
'//////////////////////////////////////////////////////////////////////////


Imports System.IO
Imports System.Reflection
Imports System.Collections
Imports Dreamworld.Mobile.PhoneControllerSDK

Public Class PluginServices
    Public Structure AvailablePlugin
        Public AssemblyPath As String
        Public ClassName As String
    End Structure

    ''' <summary>
    ''' Find a plug-in with given interface name.
    ''' </summary>
    ''' <param name="strPath">Path to search. Subdirs will not search.</param>
    ''' <param name="strInterface">Interface name</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function FindPlugins(ByVal strPath As String, ByVal strInterface As String) As AvailablePlugin()
        Dim Plugins As ArrayList = New ArrayList()
        Dim strDLLs() As String, intIndex As Integer
        Dim objDLL As [Assembly]

        'Go through all DLLs in the directory, attempting to load them
        strDLLs = Directory.GetFileSystemEntries(strPath, "*.dll")
        For intIndex = 0 To strDLLs.Length - 1
            Try
                objDLL = [Assembly].LoadFrom(strDLLs(intIndex))
                ExamineAssembly(objDLL, strInterface, Plugins)
            Catch e As Exception
                'Error loading DLL, we don't need to do anything special
            End Try
        Next

        'Return all plugins found
        Dim Results(Plugins.Count - 1) As AvailablePlugin

        If Plugins.Count <> 0 Then
            Plugins.CopyTo(Results)
            Return Results
        Else
            Return Nothing
        End If
    End Function

    Private Shared Sub ExamineAssembly(ByVal objDLL As [Assembly], ByVal strInterface As String, ByVal Plugins As ArrayList)
        Dim objType As Type
        Dim objInterface As Type
        Dim Plugin As AvailablePlugin

        'Loop through each type in the DLL
        For Each objType In objDLL.GetTypes
            'Only look at public types
            If objType.IsPublic = True Then
                'Ignore abstract classes
                If Not ((objType.Attributes And TypeAttributes.Abstract) = TypeAttributes.Abstract) Then

                    'See if this type implements our interface
                    objInterface = objType.GetInterface(strInterface, True)

                    If Not (objInterface Is Nothing) Then
                        'It does
                        Plugin = New AvailablePlugin()
                        Plugin.AssemblyPath = objDLL.Location
                        Plugin.ClassName = objType.FullName
                        Plugins.Add(Plugin)
                    End If

                End If
            End If
        Next
    End Sub

    Public Shared Function CreateInstance(ByVal Plugin As AvailablePlugin) As Object
        Dim objDLL As [Assembly]
        Dim objPlugin As Object

        Try
            'Load dll
            objDLL = [Assembly].LoadFrom(Plugin.AssemblyPath)

            'Create and return class instance
            objPlugin = objDLL.CreateInstance(Plugin.ClassName)
        Catch e As Exception
            Return Nothing
        End Try

        Return objPlugin
    End Function

    ''' <summary>
    ''' Select plugin from Model ID
    ''' </summary>
    ''' <param name="ap">AvaliablePlugin</param>
    ''' <param name="baudrate">Speed</param>
    ''' <param name="port">Port name like "COM1:"</param>
    ''' <param name="CommPhoneClassName">The name of commphone class.</param>
    ''' <returns>Plugin number in AvialiablePlugin</returns>
    ''' <remarks></remarks>
    Public Shared Function SelectPlugin(ByVal port As String, ByVal baudrate As Integer, ByVal ap As PluginServices.AvailablePlugin(), ByVal CommPhoneClassName As String) As Integer
        If ap Is Nothing Then
            Throw New Exception("Not plugin found")
        End If
        Dim ModelID As String = String.Empty
        'Find commbase class and get modelID
        For i As Integer = 0 To ap.Length - 1
            If ap(i).ClassName = CommPhoneClassName Then
                Dim objPlugin As IPhoneController
                objPlugin = DirectCast(PluginServices.CreateInstance(ap(i)), IPhoneController)
                With objPlugin
                    .Connect(port, baudrate, 1000)
                    .SetStandard()
                    ModelID = .GetModelID()
                    Console.WriteLine("Find a phone :" & ModelID)
                    .Disconnect()
                End With
            End If
        Next

        'Loop every plugin to find supported device.
        For i As Integer = 0 To ap.Length - 1
            Dim objPlugin As IPhoneController
            objPlugin = DirectCast(PluginServices.CreateInstance(ap(i)), IPhoneController)
            Dim supportedModel As String() = objPlugin.SupportedModel
            For j As Integer = 0 To supportedModel.Length - 1
                If ModelID = supportedModel(j) Then
                    Return i
                End If
            Next
        Next

        'If not found
        Throw New NotSupportedException("Your phone are not supported")
    End Function

    ''' <summary>
    ''' Search phone automatically on all avaiable port
    ''' </summary>
    ''' <param name="ap">Available Plugins</param>
    ''' <param name="index">Index of plug-in</param>
    ''' <param name="portName">Port name</param>
    ''' <returns>True if successed;False if failed.</returns>
    ''' <remarks></remarks>
    Public Shared Function AutoSearch(ByVal ap As PluginServices.AvailablePlugin(), ByRef portName As String, ByRef index As Integer) As Boolean
        Dim ports As String() = System.IO.Ports.SerialPort.GetPortNames
        Dim baudrate As Integer = 19200
        For Each aPort As String In ports
            Try
                aPort = "COM" & Val(aPort.Substring(3)).ToString
                Console.WriteLine("Trying to connect on {0}", aPort)
                index = SelectPlugin(aPort, baudrate, ap, "Dreamworld.Mobile.CommPhone")
                portName = aPort
                Return True
            Catch e As Exception
                Console.WriteLine(" Failed: {0}", e.Message)
            End Try
        Next
        Return False
    End Function
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -