2

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"));
        }
    }
4

1 に答える 1

2

ロードしようとしているアセンブリに参照が見つからない可能性があるため、ロードできないアセンブリを確認する必要があります。または、参照は存在しますが、64ビットバージョンではなく32ビット用です

Fusionログを使用して、欠落しているアセンブリを正確に把握してください

于 2012-04-10T08:49:13.307 に答える