2010-07-21 5 views
3

내 컴퓨터는 Windows 7 X64 Enterprise Edition을 실행합니다. Visual Foxpro OLEDB 드라이버를 사용할 때 실행 파일에 x86 모드가 필요합니다. 나는이 exe가 "X86"으로 사용하는 라이브러리 DLL을 컴파일해야한다고 생각했습니다. 그러나 "Any CPU"로 컴파일 된 DLL은 작동하기 때문에 다른 곳에서 사용되고 2 부를 유지할 필요가 없으므로 편리합니다. 어떻게 작동하는지 궁금해하고 이렇게 계속해야합니까?Windows x64 C# x86 콘솔 응용 프로그램 exe는 "DLL 임의의 CPU"와 작동하는 것으로 보입니다.

답변

2

프로세스가 x64 또는 x86이면 모든 CPU DLL에서 JIT가 x86 또는 x64로 컴파일됩니다. exe가 x86으로 컴파일되는 한, DLL은 x86으로 JITed됩니다. exe가 x64이면 DLL은 x64로 JITed됩니다.

2

괜찮습니다. 실행 파일이 x86을 대상으로 컴파일되는 한 모든 "모든 CPU"대상 어셈블리는 x86으로로드됩니다.

x64를 명시 적으로 대상으로하는 어셈블리를로드 할 수 없으므로 32 비트 응용 프로그램에서는 작동하지 않습니다.

1

.exe가로드 될 때 결정됩니다. 어셈블리 메타 데이터 헤더의 32BIT 플래그는 CLR의 32 비트 또는 64 비트가로드되는지 여부를 결정합니다. 그리고 가장 중요한 것은 x86 또는 x64 JIT 컴파일러입니다. 그런 다음 JIT 컴파일러는 나중에로드되는 DLL의 비트 수에 관계없이 적절한 기계어 코드를 생성합니다.

따라서 EXE에 대한 대상 플랫폼 설정 만 중요합니다.