2016-11-30 9 views
0

私はvb.netコードを持っています。これは異なるOSがインストールされたデバイスで動作するはずです。使用しているAPIは、OSの1つで実現されていない機能を除いて全く同じです。コードが存在しない場合に、一部の機能を無効にする必要はありませんが、どのようにコードを普遍的にすることができますか?私はの#defineとの#ifがVB.NETには存在しませんでしたが、彼らはそう考え、前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

は、私が言ったスクラッチ:

#CONST SOMEOS = TRUE 

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

この方法で、あなたはSOMEOSを定義した場合、唯一のsomeFunctionが呼び出されると、コンパイルされた。代わりにOTHEROSを定義すると、otherFunctionのみが呼び出され、コンパイルされます。

+0

ありがとうございます。しかし、someFunction()がitemに存在しない場合、コードはコンパイルされないので、これは機能しません。 –

+0

本当に、私は#CONSTを忘れていました。今それは動作し、ちょうどそれをテストした:) – DrDonut

+0

もう一度ありがとう。私はあなたの方法を保存し、明日それを試してみます。今のところ私は解決策を見つけました:) –

関連する問題