2016-11-30 64 views
0

我有vb.net代码,它应该在具有不同的已安装操作系统的设备上工作。使用API​​非常相似,除了某些OS在某个OS中未实现的功能。如何使代码具有通用性,而不需要禁用某些功能以防它们不存在?vb.net:如何调用一个函数,只有当它存在时

+0

你怎么称呼这些功能?通常情况下,如果函数不存在,它甚至不会编译,除非添加了一些动态代码。 –

+0

显示这些函数 –

+0

可能是编译器指令的工作,但是信息太少;很难说清楚 – Sehnsucht

回答

0

好的。刚拿到工作代码。我们将使用System.Reflection: 通过这种方式,外部函数的存在只会在RunTime中检查,我们可以编译我们的代码!

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

刮了我之前说的,我还以为#define和#如果在VB.NET是不存在的,但他们这样做:

#CONST SOMEOS = TRUE 

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

这样一来,如果你定义SOMEOS,只有someFunction被调用和编译。如果您定义为OTHEROS,则只有otherFunction被调用并编译。

+0

谢谢。但是这不起作用,因为如果someFunction()不存在于条目中,则代码不会编译。 –

+0

的确,我忘记了#CONST。现在它工作,只是测试它:) – DrDonut

+0

再次感谢。我会保存你的方法,明天再试。现在我已经找到了解决方案:) –

相关问题