在读框架设计第2版,有段话不是很明白。。。。。
在读框架设计第2版,有段话不是很明白。。。。。第9页倒数几行:
“例如,用/platform:x86开关来编译的托管程序集根本不能加载到一个64位进程,而使用同一个开关编译的可执行文件能加载到正在进行Windows64位版本的计算机的WoW64中”。
----------------------------------
1)请问程序集在这里是不是说得是DLL?
2)这句话的意思是不是:用 /platform:x86开关来编译的DLL不能加载到正在运行的64位Windows创建的进程中,而编译的Exe可以。 --------------------编程问答-------------------- 一批相关的dll的集,也就是vs中的一个工程项目吧
个人愚见。做个记号等高人说一下 --------------------编程问答-------------------- 非托管的可执行文件(exe)吧 --------------------编程问答-------------------- 你好,对于你的问题,我可以解答如下:
1.程序集也就是Assembly,简单的说它是dll是不妥当的.
首先:程序集是能够直接被CLR执行的文件,程序集=托管代码+清单+一些资源的文件.
但是dll不一定含有这些东西
可是,最后这些程序集都会别编译成为dll
--------------------编程问答-------------------- 简单地说:
程序集 = N*托管模块(IL+元数据) + M*资源文件(.JPEG,.GIF,.HTML,.etc)
--------------------编程问答-------------------- 程序集有3类,
1. class labary assembly 不可执行
2. can executed assembly
3. windows appliaction assembly --------------------编程问答-------------------- 不知道中文版的内容,英文原版CLR via C#里面,第6页最后一段和第7页第一段,详细地从多角度说明什么是Assembly。在第2章里,Assembly的解释更为详细。
对于问题1 在这里,Assembly是一个或多个dll,因此,你的说法也算正确。
对于问题2 翻译的有点问题。应该是 “用/platform:x86 选项编译出的DLL程序集 不能被64位Windows进程调用,而编译的Exe文件则可在64位Windows操作系统提供的模拟32位模式WOW下运行。” --------------------编程问答-------------------- 应该是无法创建独立的64位进程,只能由WoW64加载 --------------------编程问答-------------------- 你得看原版。就清楚了 --------------------编程问答-------------------- 今天又回来看这个帖,发觉我在6楼的解释有错误的地方,避免误导,特改正。
“Assembly是一个或多个dll”这个说法错误。我觉得更确切的说法是:Assembly很多情况下就是一个dll或Exe文件,但也可以由一个dll或Exe文件和一些模块文件和资源文件构成。一个Assembly至少也只能够包含一个dll或Exe文件。 --------------------编程问答-------------------- 关于Wow64,在网上抄了段
Windows x64 的使用者模式 (user mode) 有一個 WOW64 子系統 (Windows On Windows64,WOW64.DLL),這個子系統將負責 32 位元應用程式與 Windows x64 作業系統之間的溝通:WOW64 子系統會將 32 位元應用程式的系統呼叫轉換成 Windows x64 作業系統的格式,然後再轉給 Windows x64;作業系統會以為這是由 WOW64 子系統所呼叫,而將結果傳給 WOW64,接著 WOW64 會再將 Windows x64 的傳回值轉換成 32 位元的格式,最後再送回當初發出呼叫的 32 位元應用程式。
在 Windows x64 當中,32 位元的應用程式不僅有完全與 64 位元程式互相獨立的執行環境,甚至連登錄機易做图和軟體安裝的資料夾都各自獨立,以免兩種類型的軟體同時執行而發生衝突。因此程式裡不能混合 32 位元和 64 位元的程式易做图;請牢記這點,因為許多軟體相容的問題都是因此而起。當然,個別的 32 位元和 64 位元行程可以透過行程之間的通訊結構 (interprocess communications structures) 相互傳送資料。而雖然 32 位元應用程式在 64 位元作業系統依然會有 4 GB 的記憶體上限,但是卻可以擁有獨享的記憶體空間,不需要與作業系統核心、分頁表或其他的應用程式共用記憶體空間。
补充:.NET技术 , .NET Framework