2010-02-15 7 views
2

J'écris une application pour un périphérique exécutant Windows XP. Il existe 2 versions de l'appareil et chaque version possède sa propre API pour communiquer avec le logiciel de l'appareil. L'application que j'écris doit extraire les mêmes données de l'API. Ma question est de savoir comment écrire une application qui détectera au moment de l'exécution la version de l'appareil et utilisera l'API appropriée. J'ai compris comment lire le registre pour déterminer l'appareil.Modifier l'API de référence à l'exécution VB.NET 3.5

J'ai créé une interface contenant toutes les méthodes communes et également les classes pour chaque périphérique qui implémente l'interface. Maintenant, j'ai besoin de savoir comment activer le bon à l'exécution.

Public Interface IAPI 

    Sub InitializeMachine() 

    Function GetActiveProgram() As String 

    Function GetActiveGCodes() As String 

    Function GetCurrentBlockNumber() As Integer 

    ''#etc... 

End Interface 

''#Mill API 
Public Class CMAPI : Implements IAPI 

    Private ObjMachine As Okuma.CMDATAPI.DataAPI.CMachine 
    Private ObjPgm As Okuma.CMDATAPI.DataAPI.CProgram 

    Public Sub New() 

    End Sub 

    Public Function GetActiveGCodes() As String Implements IAPI.GetActiveGCodes 
     Try 
      Return ObjPgm.GetGCodes 
     Catch ex As Exception 
      Throw ex 
     End Try 
    End Function 

    Public Function GetActiveProgram() As String Implements IAPI.GetActiveProgram 
     Try 

      Return ObjPgm.GetActiveProgramName 

     Catch ex As Exception 
      Throw ex 
     End Try 
    End Function 

    Public Function GetCurrentBlockNumber() As Integer Implements IAPI.GetCurrentBlockNumber 
     Try 

      Return ObjPgm.GetCurrentBlockNumber 

     Catch ex As Exception 
      Throw ex 
     End Try 
    End Function 

    ''#.... 
End Class 

''#Lathe API 
Public Class CLAPI : Implements IAPI 
    Private ObjMachine As Okuma.CLDATAPI.DataAPI.CMachine 
    Private ObjPgm As Okuma.CLDATAPI.DataAPI.CProgram 

    Public Sub New() 

    End Sub 

    Public Function GetActiveGCodes() As String Implements IAPI.GetActiveGCodes 
     Try 
      Return ObjPgm.GetGCodes 
     Catch ex As Exception 
      Throw ex 
     End Try 
    End Function 

    Public Function GetActiveProgram() As String Implements IAPI.GetActiveProgram 
     Try 

      Return ObjPgm.GetActiveProgramName 

     Catch ex As Exception 
      Throw ex 
     End Try 
    End Function 

''#... 
End Class 
+0

Pour votre test, vous voudrez peut-être regarder cette question: [http://stackoverflow.com/questions/18690669/best-method-for-initializling-the-okuma-api-if-i-want-a-program-that-works-for-b –

Répondre

1

Je voudrais utiliser une méthode de fabrication:

Dim rightAPI As IAPI 


rightAPI = APIFactory.GetAPI(HowYouDistinguishDevice) 

' Use rightAPI wherever you need it 
MessageBox.Show(rightAPI.GetActiveProgram()) 


public class APIFactory 

    public shared function GetAPI(string HowYouDistinguishDevice) as IAPI 
     dim oAPI as IAPI 
     'do whatever it is you need to do to determine which api to use 
     if CMAPI then oAPI = new CMAPI 
     if CLAPI then oAPI = new CLAPI 
     'or you could use select, whatever 
     return oAPI 
    end function 
end class 
+0

Merci c'est une bonne idée – jweaver

2

Untested, la théorie est juste - il pourrait bien être des fautes de frappe: P

Dim rightAPI As IAPI 

If CheckForTypeCMAPI() = true Then ' You said you can determine which device youre on, replace this with the right function 
    rightAPI = new CMAPI() 
Else 
    rightAPI = new CLAPI() 
End If 

' Use rightAPI wherever you need it 
MessageBox.Show(rightAPI.GetActiveProgram()) 
+0

quoi tester? principe premier: programme à l'interface pas la mise en œuvre. avec cela à l'esprit la route en avant est évident à voir ... –

+0

édité pour indiquer que je voulais dire il pourrait y avoir des fautes de frappe car je n'ai pas de compilateur vb.net sur cette machine: P – BarrettJ

+0

Excellent merci beaucoup! Je comprends maintenant le concept de programmation à l'interface. Je me suis cogné la tête sur le mur toute la matinée en essayant de comprendre cela. – jweaver

Questions connexes