32ビットと64ビット用にコンパイルしたマネージド/ネイティブの混合dllを読み込もうとしています。プログラムをWindows732ビットで実行すると、32ビットdllを問題なくロードできます。64ビットdllをロードすると、BadImageFormatExceptionが発生します。これは、期待どおりです。
私が抱えている問題は、Windows764ビットで同じテストを行う場合です。
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"));
}
}