Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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# 找不到指定的模块-64位dll_C#_C++_C_Dll_Dllimport - Fatal编程技术网

C# 找不到指定的模块-64位dll

C# 找不到指定的模块-64位dll,c#,c++,c,dll,dllimport,C#,C++,C,Dll,Dllimport,我有一个32位的dll,它是用原生C编写的,当时我尝试用VC++(VS2008)编译,通过更改编译的平台将dll转换为x64。但当我试图从同样是“x64”平台的C#应用程序访问dll时,它无法加载dll。我使用Dllimport将dll链接到我的应用程序 我在Vista中使用的操作系统,但我无法从我的应用程序调用at dll函数,它说加载dll失败 有没有办法解决这个问题 期待您的帮助 问候,, Ga我猜可能是依赖项,您的新DLL可能缺少它需要的一些64位DLL 试试工具“dependencyw

我有一个32位的dll,它是用原生C编写的,当时我尝试用VC++(VS2008)编译,通过更改编译的平台将dll转换为x64。但当我试图从同样是“x64”平台的C#应用程序访问dll时,它无法加载dll。我使用Dllimport将dll链接到我的应用程序

我在Vista中使用的操作系统,但我无法从我的应用程序调用at dll函数,它说加载dll失败

有没有办法解决这个问题

期待您的帮助

问候,,
Ga

我猜可能是依赖项,您的新DLL可能缺少它需要的一些64位DLL

试试工具“dependencywalker”(win的ldd类工具,www.dependencywalker.com),找出哪些链接与哪些链接相对应。可能会有帮助。

检查要在何处构建不同版本(x86/x64)的dll

最简单的方法是将64位dll的目标目录设置为目标文件夹的“x64”子目录。在64位解决方案配置中,将C#的目标目录也设置为“x64”目录

这将确保每个平台的exe尝试加载正确的dll。

感谢您的帮助

当我将dll放在C:\Windows\System32\下时,错误得到了解决

谢谢,
Ga

我曾经在这方面遇到过问题。我有一个C++ DLL,它充当一个硬件接口,我需要从C调用这个硬件。但是,如果未插入该硬件,它将使DllImport调用失败。这是因为DLL初始化函数返回了一个故障,所以C#只是说它无法加载DLL,这可能与DLL所在的位置无关


在C代码中设置DLL时,请检查没有导致某种错误。

可能需要更多信息:您是否在64位Vista上运行?您是否能够使用C#应用程序中的32位dll?如果您在64位操作系统上运行此功能,请仔细检查您是否尚未在“构建”选项卡中将CPU类型设置为x86。(如果您以前使用32位DLL和64位操作系统,可能就是这种情况)当我检查使用dependency walker时,它没有显示此DLL的任何依赖关系。所以我猜不出这里有什么问题。当它加载失败时,你会得到什么错误代码?尝试编写一个小型c++x64程序来加载DLL,看看这是否有效,看看问题是在DLL中还是在某个.NET问题中。您也可以在Visual Studio命令提示符下使用“dumpbin/DEPENDENTS MyModule.DLL”来查看依赖项。在我的例子中,丢失的是VCRuntime140.dll。