我正在尝试加载一个混合的托管/本地DLL,我已经为32位和64位编译了它。如果我在Windows 7 32位上运行程序,我可以无问题地加载32位DLL。如果我加载64位DLL,则会出现BadImageFormatException错误,这是我预料到的。
我的问题是当我在Windows 7 64位下进行同样的测试时:
如果我加载32位DLL,我会得到BadImageFormatException错误,这个结果是正确的。
但是如果我加载64位DLL,则会出现FileNotFoundException错误。这个信息是不正确的,因为我事先检查了该DLL的存在性!
有人能告诉我,为什么我不能在Windows 7 64位下加载我的64位DLL吗?
这是我的示例代码:
我的问题是当我在Windows 7 64位下进行同样的测试时:
如果我加载32位DLL,我会得到BadImageFormatException错误,这个结果是正确的。
但是如果我加载64位DLL,则会出现FileNotFoundException错误。这个信息是不正确的,因为我事先检查了该DLL的存在性!
有人能告诉我,为什么我不能在Windows 7 64位下加载我的64位DLL吗?
这是我的示例代码:
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"));
}
}