Ich versuche, eine gemischte verwaltete/native DLL zu laden, die ich für 32 Bit und für 64 Bit kompiliert habe. Wenn ich mein Programm unter Windows 7 32 Bit ausführen, kann ich die 32-Bit-DLL problemlos laden. Wenn ich die 64-Bit-DLL lade, bekomme ich BadImageFormatException, was ich erwartet habe.FileNotFoundException mit Assembly.LoadFile unter Windows 7 64 Bit
Das Problem, das ich habe, ist, wenn ich den gleichen Test unter Windows 7 64 Bit zu tun:
Wenn ich die 32-Bit-DLL zu laden, erhalte ich BadImageFormatException. Das ist soweit in Ordnung.
Aber wenn ich die 64-Bit-DLL lade, bekomme ich FileNotFoundException. Und diese Information ist einfach nicht wahr, weil ich die Existenz dieser DLL vorher überprüfe!
Kann mir jemand sagen, warum ich meine 64-Bit-DLL unter Windows 7 64 Bit nicht laden kann?
Hier ist mein Beispielcode:
private void Button32_Click(object sender, RoutedEventArgs e)
{
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "x86", "Native.dll");
LoadAssembly(path);
}
private void Button64_Click(object sender, RoutedEventArgs e)
{
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "amd64", "Native.dll");
LoadAssembly(path);
}
void LoadAssembly(string path)
{
if(File.Exists(path))
{
MessageBox.Show("Loading " + path);
Assembly asm = null;
try
{
asm = Assembly.LoadFile(path);
}
catch(Exception ex)
{
MessageBox.Show("Exception!!!\n" + ex);
}
MessageBox.Show("Success " + (asm == null ? "no" : "yes"));
}
}
Ihre Antwort führte mich auf den Blog von Suzanne Cook in http://blogs.msdn.com /b/suzcook/archive/2003/05/29/57120.aspx was mir geholfen hat, die Lösung zu finden. Die systemeigene DLL referenzierte msvcr100.dll, die auf dem System fehlte. Das Fusionsprotokoll half hier nicht, aber Dependency Walker tat es. – MTR