我们有一位程序员做了一些对任何人都没有意义的改变,我希望有人可以提供一些见解。很遗憾,我们无法在下周与他联系但是很高兴知道这一点信息越早。
我们有一个自定义应用程序加载器(内置于.net),它可以下载所有适当的源文件,注册/取消注册作为COM的dll,并为某些程序集运行RegASM。我们在Windows 7(x64)下遇到了装载机问题,他被指派纠正。
为解决这个问题而分配的唯一一件事就是请求将加载器构建为x86而不是“Any CPU”。我们很难看到这可能有什么问题。
以前我们遇到COM注册错误,并且在尝试使用RegASM创建TLB文件时“不允许请求注册表访问”错误。有没有人知道他的改变会如何影响这一点?
答案 0 :(得分:2)
您的同事修复是正确的。原因如下:
在Windows x64中,进程可以以32位或64位进程启动。 64位进程只能加载64位dll,而32位进程只能加载32位dll。
如果您的.NET应用程序的平台目标(例如,在项目属性中指定)设置为“任何CPU”,则中间代码将编译为32位或64位代码,具体取决于目标平台,即在x64系统上将生成64位代码。因此,任何32位库(如本机32位COM组件)都无法加载到64位进程中。