【问题标题】:Will dll be loaded as 32bit or 64bit when exe is x86(32bit) on a 64bit machine?当 exe 在 64 位机器上为 x86(32 位)时,dll 会被加载为 32 位还是 64 位?
【发布时间】:2015-03-31 03:52:07
【问题描述】:

例如,在 VS2008 中,我有一个构建为 x86(32 位)的 exe,因为我希望它即使在 64 位机器上也能以 32 位运行。该 exe 将通过反射和调用动态加载其他 dll。

现在我的问题是,如果我将我的 dll 构建为“所有 CPU”而不是 x86,并且当我在 64 位机器上运行 exe 主机时,一旦我的 dll 被加载或调用,该 dll 将被处理作为 64 位还是 32 位? (我的测试显示它被视为32位,但我想和大家确认一下。我认为一般情况下,32位无法访问64位。由于exe是32位,所以dll总是以32位加载?)

谢谢

【问题讨论】:

    标签: c# .net dll


    【解决方案1】:

    是的,你是对的。除非您跳过一些严重的障碍,否则该过程的每个部分(至少是用户代码部分)都是 32 位的。

    【讨论】:

      【解决方案2】:

      如果要加载的DLL也标记为AnyCPU,则不会有任何问题。

      如果您有一个在 64 位计算机上运行的 AnyCPU EXE(例如)(因此它是一个 x64 进程),然后尝试加载一个 x86 DLL(未标记为 AnyCPU),那么它将失败并显示运行时异常 (BadImageFormatException)

      【讨论】:

        猜你喜欢
        • 2012-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 2011-04-09
        • 1970-01-01
        • 2011-11-11
        相关资源
        最近更新 更多