2016-11-30 1 views
0

Ich habe vb.net Code, der auf dem Gerät mit verschiedenen installierten Betriebssystemen funktionieren sollte. Die verwendenden APIs sind ziemlich identisch, mit Ausnahme einiger Funktionen, die nicht in einem der Betriebssysteme realisiert sind. Wie kann ich den Code universell machen, ohne einige Funktionen deaktivieren zu müssen, falls sie nicht vorhanden sind?vb.net: So rufen Sie eine Funktion, nur wenn es vorhanden ist

+0

Wie nennt man diese Funktionen? Normalerweise kompiliert es nicht einmal, wenn die Funktionen nicht vorhanden sind, es sei denn, es wird ein dynamischer Code hinzugefügt. –

+0

Diese Funktionen anzeigen –

+0

Könnte ein Auftrag für Compiler-Direktiven sein, aber mit so wenigen Informationen; schwer zu sagen, sicher – Sehnsucht

Antwort

0

Ok. Habe gerade den Arbeitscode bekommen. Wir verwenden die System.Reflection: Auf diese Weise wird das Vorhandensein der externen Funktion nur auf RunTime geprüft und wir können unseren Code kompilieren!

Sub DynamicLibraryUse(ByVal val As Byte) 'just because my External Function receives byte values 
    Dim myAssembly As System.Reflection.Assembly 
    myAssembly = Assembly.Load("MyExternalLibrary") 

    Dim o As Object = myAssembly.CreateInstance("MyExternalNamespace.Class") 
    Dim myType As Type = myAssembly.GetType("MyExternalNamespace.Class") 
    Dim myMethod As MethodInfo = myType.GetMethod("MyExternalMethod") 

    Dim val2 As Object() = New Object(0) {} 
    val2(0) = val 

    myMethod.Invoke(o, val2) 
End Sub 
0

Scratch, was ich gesagt, ich dachte # define und # if nicht in VB.NET nicht existierte, aber sie tun so:

#CONST SOMEOS = TRUE 

Dim item As SomeClass 
#IF SOMEOS 
item.someFunction() 
#ELSE 
item.otherFunction() 
#ENDIF 

diese Weise, wenn Sie SOMEOS definieren, nur someFunction wird aufgerufen und kompiliert. Wenn Sie stattdessen OTHEROS definieren, wird nur otherFunction aufgerufen und kompiliert.

+0

Danke. Dies funktioniert jedoch nicht, da der Code nicht kompiliert wird, wenn in itemFunction() nicht vorhanden ist. –

+0

Stimmt, ich hatte das #CONST vergessen. Jetzt funktioniert es, nur getestet :) – DrDonut

+0

Nochmals vielen Dank. Ich werde Ihre Methode speichern und werde es morgen versuchen. Für jetzt habe ich die Lösung gefunden :) –

Verwandte Themen