C# 当exe在64位计算机上为x86(32位)时,dll将加载为32位还是64位?

C# 当exe在64位计算机上为x86(32位)时,dll将加载为32位还是64位?,c#,.net,dll,C#,.net,Dll,例如,在VS2008中,我将exe构建为x8632bit,因为我希望它在32位甚至64位机器上运行。此exe将通过反射和调用动态加载其他DLL 现在我的问题是,如果我将dll构建为所有CPU,而不是x86,并且当我在64位机器上运行exe主机时,一旦加载或调用我的dll,dll将被视为64位还是32位? 我的测试显示它被视为32位,但我想和大家确认一下。我认为一般来说,32位不能访问64位。因为exe是32位的,所以DLL总是以32位加载 谢谢是的,你说得对。除非您跳过一些严重的障碍,否则进程的

例如,在VS2008中,我将exe构建为x8632bit,因为我希望它在32位甚至64位机器上运行。此exe将通过反射和调用动态加载其他DLL

现在我的问题是,如果我将dll构建为所有CPU,而不是x86,并且当我在64位机器上运行exe主机时,一旦加载或调用我的dll,dll将被视为64位还是32位? 我的测试显示它被视为32位,但我想和大家确认一下。我认为一般来说,32位不能访问64位。因为exe是32位的,所以DLL总是以32位加载


谢谢

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

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

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