我有一个用C++编写的动态链接库,需要由C#中的应用程序使用。它在Vista x86下运行得很好,但在x64下却无法加载。因此,我构建了DLL的x64版本,并检测操作系统是x86还是x64,并对相应的DLL使用适当的互操作调用。这在Vista下运行得很好,但是在Vista下,当我试图加载x86时,我得到了一个“并行”的错误。到底为什么它不能加载它,可以做些什么来纠正这个问题?(如果您需要更多信息,请告诉我,我不确定哪些信息与解决此问题相关。)
发布于 2008-12-04 12:41:31
需要在客户端计算机上安装用于x64的VC90重分发。就清单而言,我认为您可以修改它以删除processorArchitecture标记。要么这样,要么让它说“任何”。
发布于 2008-12-04 06:19:27
第一个想法:你可以试着在项目的C#部分将“平台目标”设置为"x86",看看它是否能在Vista64机器上以32位兼容模式运行吗?
有关SxS错误的更多信息将是有用的-它可能与某些特定的(32位?)未安装的运行时库的版本?
发布于 2008-12-04 06:48:54
关于MadKeithV的答案的一些进一步的信息:
在Windows x64中,进程可以作为32位或64位进程启动。64位进程只能加载64位dlls,32位进程只能加载32位dlls。
如果您的.Net应用程序的平台目标(例如,在项目属性中指定)设置为“任何CPU",则中间代码将根据目标平台被编译为32位或64位代码,即在x64系统上将生成64位代码。
因此,代码不能再加载32位dll。
如果代码加载非托管程序集,则应始终显式指定目标平台。
https://stackoverflow.com/questions/340687
复制相似问题