我有一个32位托管程序集,可以访问32位COM组件。当我使用64位标志编译程序集时,我尝试从它访问32位COM组件时出现错误。
有解决这个问题的方法吗?
答案 0 :(得分:2)
当您使用64位标志并在64位操作系统上运行时,程序集将加载到64位进程。绝大多数COM对象都是“在Proc Server中”创建的。
创建“in proc服务器”的第一步是将包含COM对象的DLL加载到执行创建的进程中。 DLL为32位,无法加载到进程中。
你很遗憾地遇到了两个选择
答案 1 :(得分:2)
除了已经给出的答案:
在Windows x64中,进程可以作为32位或64位进程启动。 64位进程只能加载64位dll,而32位进程只能加载32位dll。
如果您的.Net应用程序的平台目标(例如在项目属性中指定)设置为“任何CPU”,则中间代码将编译为32位或64位代码,具体取决于目标平台,即在x64系统上将生成64位代码。
因此代码不能再在64位系统上加载32位dll。
如果您的代码加载了非托管程序集,则应始终明确指定目标平台。
答案 2 :(得分:1)
您应该找到并安装此com组件的64位版本。如果它不可用,您将必须将.net应用程序作为32位应用程序运行。 com组件正在您的进程中运行。而且你不能在同一个过程中同时运行32位和64位代码。
答案 3 :(得分:0)
您可以尝试使用corflags(可能/可能不起作用),或者将您的应用设置为仅在32位编译。
corflags <assemblyname> /32bit-
删除.Net程序集的32位限制。
答案 4 :(得分:0)
当进程加载为x64时,无法加载x86二进制文件/程序集/任何内容。