我有32位的dll,它使用本机C编写,当我尝试编译与VC++(VS2008)通过更改它编译的平台将dll转换为x64。但是,当我试图从我的C#应用程序也是“X64”平台访问DLL时,它无法加载DLL。我用Dllimport将dll与我的应用程序链接起来。无法找到指定的模块 - 64位DLL
我在Vista中使用的操作系统,但我无法从我的应用程序调用dll函数它说无法加载dll。
有什么办法可以解决这个问题。
期待您的帮助。
问候, 嘎
我有32位的dll,它使用本机C编写,当我尝试编译与VC++(VS2008)通过更改它编译的平台将dll转换为x64。但是,当我试图从我的C#应用程序也是“X64”平台访问DLL时,它无法加载DLL。我用Dllimport将dll与我的应用程序链接起来。无法找到指定的模块 - 64位DLL
我在Vista中使用的操作系统,但我无法从我的应用程序调用dll函数它说无法加载dll。
有什么办法可以解决这个问题。
期待您的帮助。
问候, 嘎
尝试使用工具“dependency walker”(类似于ldd的win工具,www.dependencywalker.com)来找出与什么相关的链接。可能会有所帮助。
我的猜测是依赖,新的DLL可能有一些失踪的64位DLL的需要。
当我检查使用依赖沃克它没有显示任何依赖这个DLL。所以我无法猜测这里有什么问题。 – 2009-06-04 09:26:50
检查你正在构建dll的不同版本(x86/x64)的位置。
最简单的做法是将64位dll的目标目录设置为目标文件夹的“x64”子目录。在您的64位解决方案配置中,将C#的目标目录设置为'x64'目录。
这将确保每个平台的exe都会尝试加载正确的dll。
感谢您的帮助。
当我将dll放在C:\ Windows \ System32 \下时,错误得到解决。
感谢, 嘎
我有一个问题,这个曾经沿着这些路线。我有一个C++ DLL作为一个硬件的接口,我需要从C#调用。但是,如果没有插入硬件,它将导致DllImport调用失败。这是因为DLL初始化函数返回失败,所以C#只是说它无法加载DLL,它可能不是与该DLL是。
检查您是否在您的C代码中设置DLL时导致某种错误。
可能需要更多信息:您是否在64位Vista上运行?你能够使用C#应用程序中的32位dll吗? – 2009-06-04 09:11:02
如果您在64位操作系统上运行此操作,请仔细检查是否尚未在“构建”选项卡中将CPU类型设置为x86。 (可能是这种情况,如果你以前使用过32位DLL和64位操作系统) – 2009-06-04 09:20:15
我只检查了它的x64。 – 2009-06-04 09:25:55