Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Vista X64中无法加载C++应用程序中的C++ DLL 我在C++中编写了一个DLL,需要在C中应用。它在Vista x86下运行很好,但是在x64下无法加载。因此,我构建了一个x64版本的DLL,检测操作系统是x86还是x64,并对相应的DLL使用相应的互操作调用。这在Vista x86下运行良好,但在Vista x64下,当它尝试加载DLL时,我会遇到一个并行错误。为什么它无法加载它,可以做些什么来纠正这一点?如果您需要更多信息,请告诉我,我不确定什么信息与解决此问题相关。_C#_C++_Dll_Side By Side - Fatal编程技术网

C# 在Vista X64中无法加载C++应用程序中的C++ DLL 我在C++中编写了一个DLL,需要在C中应用。它在Vista x86下运行很好,但是在x64下无法加载。因此,我构建了一个x64版本的DLL,检测操作系统是x86还是x64,并对相应的DLL使用相应的互操作调用。这在Vista x86下运行良好,但在Vista x64下,当它尝试加载DLL时,我会遇到一个并行错误。为什么它无法加载它,可以做些什么来纠正这一点?如果您需要更多信息,请告诉我,我不确定什么信息与解决此问题相关。

C# 在Vista X64中无法加载C++应用程序中的C++ DLL 我在C++中编写了一个DLL,需要在C中应用。它在Vista x86下运行很好,但是在x64下无法加载。因此,我构建了一个x64版本的DLL,检测操作系统是x86还是x64,并对相应的DLL使用相应的互操作调用。这在Vista x86下运行良好,但在Vista x64下,当它尝试加载DLL时,我会遇到一个并行错误。为什么它无法加载它,可以做些什么来纠正这一点?如果您需要更多信息,请告诉我,我不确定什么信息与解决此问题相关。,c#,c++,dll,side-by-side,C#,C++,Dll,Side By Side,第一个想法:您可以尝试将项目C部分中的平台目标设置设置为x86,以查看它是否在Vista 64机器上以32位兼容模式运行吗 关于SxS错误的更多信息将非常有用-它可能与某些特定的32位错误有关?未安装的运行库版本?第一个想法是:能否尝试将项目C部分中的平台目标设置设置设置为x86,以查看它是否在Vista 64机器上以32位兼容模式运行 关于SxS错误的更多信息将非常有用-它可能与某些特定的32位错误有关?未安装的运行库版本?有关MadKeithV答案的更多信息: 在Windows x64中,进

第一个想法:您可以尝试将项目C部分中的平台目标设置设置为x86,以查看它是否在Vista 64机器上以32位兼容模式运行吗


关于SxS错误的更多信息将非常有用-它可能与某些特定的32位错误有关?未安装的运行库版本?

第一个想法是:能否尝试将项目C部分中的平台目标设置设置设置为x86,以查看它是否在Vista 64机器上以32位兼容模式运行


关于SxS错误的更多信息将非常有用-它可能与某些特定的32位错误有关?未安装的运行库版本?

有关MadKeithV答案的更多信息:

在Windows x64中,进程可以作为32位或64位进程启动。64位进程只能加载64位DLL,32位进程只能加载32位DLL

如果您的平台目标(例如在.Net应用程序的项目属性中指定的)设置为任何CPU,则中间代码将编译为32位或64位代码,具体取决于目标平台,即在x64系统上,将生成64位代码

因此,代码无法再加载32位dll


如果代码加载非托管程序集,则应始终明确指定目标平台。

有关MadKeithV答案的更多信息:

在Windows x64中,进程可以作为32位或64位进程启动。64位进程只能加载64位DLL,32位进程只能加载32位DLL

如果您的平台目标(例如在.Net应用程序的项目属性中指定的)设置为任何CPU,则中间代码将编译为32位或64位代码,具体取决于目标平台,即在x64系统上,将生成64位代码

因此,代码无法再加载32位dll


如果您的代码加载非托管程序集,则应该始终明确指定目标平台。

并列错误可能更容易由您的C++ DLL清单文件设置引起,要么它们没有被嵌入,要么您选择不嵌入清单并使用32位版本清单。

简单的解决方法是将C应用程序标记为x86的杯子,并用32位DLL运行。

并排错误可能更容易由C++ C++ DLL清单文件设置引起,或者它们没有被嵌入,或者您选择不嵌入清单,而是使用32位版本清单。


简单的解决方案是将您的c应用程序标记为x86 cup,并使用32位dll运行。

如果其他方法都不起作用。。你可以试一试。
它显示未找到的文件依赖项。。这可能会给您一个继续的线索。

如果没有其他办法。。你可以试一试。
它显示未找到的文件依赖项。。这可能会给您一个继续的线索。

需要在客户端计算机上安装适用于x64的VC90的redist。就清单而言,我认为您可以修改它以删除processorArchitecture标记。要么这样,要么让它说任何。

需要在客户端计算机上安装适用于x64的VC90的redist。就清单而言,我认为您可以修改它以删除processorArchitecture标记。要么这样,要么让它说任何。

您的32位后进程中有一个小错误,只加载32位而不是64位DLL。但是谢谢你的帖子,这很有用,我不知道背景,只知道修复程序。你的帖子中有一个小错误-32位进程只加载32位而不是64位DLL。但是谢谢你的帖子,这很有用,我实际上不知道背景,只知道修复程序。你是对的,我没有在客户机上安装VC90 redist。愚蠢的错误!:你说得对-我没有在客户机上安装VC90 redist。愚蠢的错误!: