2013-08-10 6 views
10

VB.netでプログラムを開発していますが、System.Data.SQLiteのプリコンパイルされたバイナリを.NET用に使用していますが、x64アーキテクチャーでは機能しません。ファイル。x86/x64アーキテクチャ用のSQLite dll

System.BadImageFormatException: 
Could not load file or assembly 'System.Data.SQLite, Version=1.0.65.0, Culture=neutral, 
PublicKeyToken=db937bc2d44ff139' or one of its dependencies. An attempt was made to load a program with an incorrect format. 
File name: 'System.Data.SQLite, 
Version=1.0.65.0, 
Culture=neutral, 
PublicKeyToken=db937bc2d44ff139' 

多分一つだけのDLLを使用する方法があります:

  1. が#IFDEFがまたは他のx64コード(x86のは、いくつかのコードの一部を含む)のようないくつかのディレクティブを追加しますが
  2. のdllに参加1つだけを作る。
  3. リファレンスはVB.net

でこのDLLは、私はx64の1つだけのコンパイルではなく、X32用とその他をしたいと思いとして、他のより良いアイデアだと思いますか。例えば

(32ビット):

Private Shared Sub OpenConection(ByRef Conn As SQLite.SQLiteConnection) 
    Conn = New SQLite.SQLiteConnection("Data Source=" & System.Environment.CurrentDirectory & "\database.db") 
    Conn.Open() 
End Sub 

Private Shared Sub CloseConection(ByRef Conn As SQLite.SQLiteConnection) 
    Conn.Close() 
    Conn.Dispose() 
    Conn = Nothing 
End Sub 

Public Shared Function ReturnSelect(ByVal DataTAbleName As String, ByVal sQuery As String, ByVal sWhere As String) As Data.DataTable 
    Dim lDT As New DataTable 
    Dim lTA As New SQLite.SQLiteDataAdapter 
    If DataTAbleName Is Nothing Then Return New DataTable(DataTAbleName) 
    Try 
     OpenConection(conexion) 
     lTA = New SQLite.SQLiteDataAdapter("SELECT " & sQuery & " FROM " & DataTAbleName & IIf(sWhere <> String.Empty, " WHERE ", "") & sWhere, conexion) 
     lTA.Fill(lDT) 
    Catch ex As Exception 
     Throw ex 
    Finally 
     CloseConection(conexion) 
     lTA.Dispose() 
     lTA = Nothing 
    End Try 
    Return lDT 
End Function 

64ビットアーキテクチャ上で動作するようにそれを変更する方法は? はたぶん32と64のdllのと機能の両方を含む

Try 
    Instance = Me 
    'Check If Homidom Run in 32 or 64 bits 
    If IntPtr.Size = 8 Then _OsPlatForm = "64" Else _OsPlatForm = "32" 
    'continue code 

Catch ex As Exception 
    ' ex.Message 
End Try 

答えて

関連する問題