Autor Beitrag
Roob
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 21.03.14 12:30 
Hallo zusammen,

ich habe die Suche bereits genutzt und auch ein Thema gefunden was meinem gleicht. Die Lösungsansätze waren jedoch nicht hilfreich.

Ich habe ein kleines Datenbankprogramm (mit SQLite) geschrieben, was einwandfrei auf meinem Rechner läuft.
Wenn ich es allerdings auf meinem Laptop ausführe sagt mir eine Fehlermeldung, dass die SQLite.Interop.dll nicht auffindbar ist obwohl sie wie gehabt im selben Ordner liegt.
Ich habe das Programm auf merhere Arten gebuildet. Any CPU, 32bit, 64 bit... Alles läuft problemlos auf dem Hauptrechner nur auf dem Laptop nicht.

Beide Geräte laufen mit Win7 64-Bit.

Auch google hat mich bisher nicht weitergebracht. Hat wer vielleicht mal dieses Problem gehabt und weiß wie ich es lösen kann?

Gruß Roob
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4706
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 21.03.14 12:40 
Zitat:
dass die SQLite.Interop.dll nicht auffindbar ist obwohl sie wie gehabt im selben Ordner liegt.


Ich vermute mal eher dein Programm sagt das diese dll nicht geladen werden kann oder? Das bedeutet dann eher das eine weitere Abhängigkeit der Interop Assembly nicht gefunden werden kann zum Beispiel der eigentlich Sqlite Client.

Gab es bei Sqlite nicht immer auch Mixmode Assemblies wo der native Client schon reinkompiliert ist? Dann braucht es eigentlich keine Interop Assembly.
Roob Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 21.03.14 12:53 
Zitat:
Ich vermute mal eher dein Programm sagt das diese dll nicht geladen werden kann oder? Das bedeutet dann eher das eine weitere Abhängigkeit der Interop Assembly nicht gefunden werden kann zum Beispiel der eigentlich Sqlite Client.


Die Fehlermeldung lautet: “Unable to load DLL ‘SQLite.Interop.dll’: The specified module could not be found. (Exception from HRESULT: 0x8007007E)”

Ich habe eine Möglichkeit gefunden wie es funktioniert, optimal ist es leider nicht.
Ich habe testweise mal das komplette SQLite Paket meinem Projekt zugefügt (installiert über Package Manager Console) und es funktioniert jetzt auch auf dem Laptop.
Allerding wurde aus dem ~3mb Ordner ein 50mb Ordner..
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4706
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 21.03.14 13:05 
Zitat:
Die Fehlermeldung lautet: “Unable to load DLL ‘SQLite.Interop.dll’: The specified module could not be found. (Exception from HRESULT: 0x8007007E)”


Ist unglücklich formuliert aber das spezifizierte Modul kann wie gesagt auch etwas sein das die SQLite.Interop.dll braucht. Sie muß nicht selbst gemeint sein.

Ich habe mal gerade in einem alten Projekt nachgeschaut wo ich den Provider von system.data.sqlite.org benutz habe.
Da mußte nur

SQLite.Interop.dll
System.Data.SQLite.dll

deployed werden (zusammen 800k).
Roob Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 21.03.14 13:12 
Das dachte ich auch bis jetzt.

Auf diese Art und Weise funktioniert es auch einwandfrei auf meinem Hauptrechner, mit dem ich alles programmiere.

Wenn es ein Modul ist welches die SQLite.Interop.dll braucht, wie finde ich heraus welches es ist?
Die Ordner sind 1:1 gleich bestückt.

Gibt es eine Möglichkeit eine Unmanaged DLL sprich die Interop.dll wie die normale Referenz automatisch im Projektordner zu platzieren?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4706
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 21.03.14 14:05 
Zitat:
Gibt es eine Möglichkeit eine Unmanaged DLL sprich die Interop.dll wie die normale Referenz automatisch im Projektordner zu platzieren?


Füg sie einfach dem Project hinzu, wie jede Source Code Datei. Wenn du 'Copy to Output Directory' auf zum Beispiel 'Copy if newer' setzt hast du die da dann immer passend egal ob Debug/Release oder welche Konfiguration auch immer.
Roob Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 27.03.14 13:44 
Zitat:
Füg sie einfach dem Project hinzu, wie jede Source Code Datei. Wenn du 'Copy to Output Directory' auf zum Beispiel 'Copy if newer' setzt hast du die da dann immer passend egal ob Debug/Release oder welche Konfiguration auch immer.


Als Referenz hinzufügen funktioniert nicht, weil es ja eine unmanage dll ist. Deshalb habe ich sie als "Existing Item" eingebunden.
Sie wird wie gewünscht ins root Verzeichnis des Programms kopiert, allerdings bleibt die Fehlermeldung..

Zitat:
System.DllNotFoundException: Unable to load DLL 'SQLite.Interop.dll': Das angegebene Modul wurde nicht gefunden. (Exception from HRESULT: 0x8007007E)


Ich weiß langsam nicht mehr weiter :(
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4791
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 27.03.14 17:47 
Lade dir mal den Dependency Walker herunter und öffne mit diesem mal die "SqLite.Interop.dll". Dieser zeigt dir dann an welche DLLs noch benötigt werden (und ob welche fehlen).
Roob Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 28.03.14 09:46 
Ich habe mir das Programm geladen, aber ein paar weitere Tests vorher durchgeführt.

Ich habe das Programm mit 32bit dlls auf 32bit Basis kompiliert. Das selbe mit 64bit.
Dann habe ich 32bit dlls auf 64bit Basis kompiliert. (Es ist nicht das erste mal, dass ich all diese Möglichkeiten durchspiele!)

Ich habe alle Programme getestet. Ich kann mir nicht erklären wieso das auf einmal funktioniert.
Zuerst haben sie gemeckert, dass die Datenbankdatei nicht zu öffnen ist. Ich habe dein Schreibschutz vom Ordner geholt und es hat funktioniert..
Bei jeder einzelnen bis auf 32bit zu 64bit kompiliert.

Die SQLite dlls scheinen ziemlich empfindlich auf das falsche System zu reagieren. Hier also aufpassen an alle die, die das Problem in Zukunft haben.

Vielen Dank für eure Hilfe :)