2011-07-11 11 views
1

私は開発中のライブラリから関数をインポートしようとしています。私は "libraryD.dll"をデバッグ用に、 "library.dll"をリリース用にビルドしています。 .IがやりたいVBビルドタイプの条件付きDLL関数のインポート

#If Debug 
Declare Function someFunction Lib "library.dll" Alias "someFunc"() As Integer 
#Else 
Declare Function someFunction Lib "libraryD.dll" Alias "someFunc"() As Integer 
#EndIf 

さて、これは大丈夫だろうが、すべての40個の機能のために、これは見て(と少しビット無愛想)する事は非常に醜いなるだろう:残念ながら、それは私がこれをしなければならないことを意味し

#If Debug 
#Const dllName = "libraryD.dll" 
#Else 
#Const dllName = "library.dll" 
#EndIf 
Declare Function someFunction Lib dllName Alias "someFunc"() As Integer 

VBでこれを行う方法はありますか? :-(

TIA!

+0

あなたのライブラリは.Netからインポートしていますかアセンブリ? – N0Alias

+0

いいえ、ちょうど私が最初から作成した関数のC++ライブラリです。 –

+0

これを行うのが正しい方法であるかどうかはわかりませんが、過去には必要なものすべてを持つ.NETラッパーを作成しています。とにかくマーシャリングする必要がある場合は、これを実行することをお勧めします。このラッパーでは、他のアセンブリの関数に切り替えるためのロジックを含めることができます。 – Brad

答えて

1

あなたは、単に一つのこと...

Dim dllName as string 
    #If Debug 
    dllName = "libraryD.dll" 
    #Else 
    dllName = "library.dll" 

    Declare Function someFunction Lib dllName Alias "someFunc"() As Integer 

は、これは確かに... ...コーディングハッピー
をあなたの問題を解決するん:)

+0

DLL名が定数文字列である必要があるため、これは機能しません。 –

+0

ですから、dllNameをconst dllNameに変更してください。 – Uday0119

+0

テストしましたか?私はそれを試みたと信じて、それは動作しませんでした。 –

0

をDLLImport属性を使用してみてください:

#If Debug 
Const dllName = "libraryD.dll" 
#Else 
Const dllName = "library.dll" 
#EndIf 

    <System.Runtime.InteropServices.DllImport(dllName)> Private Shared Function somefunction() As Integer 
    End Function 
関連する問題