2009-06-04 55 views
1

我有32位的dll,它使用本机C编写,当我尝试编译与VC++(VS2008)通过更改它编译的平台将dll转换为x64。但是,当我试图从我的C#应用​​程序也是“X64”平台访问DLL时,它无法加载DLL。我用Dllimport将dll与我的应用程序链接起来。无法找到指定的模块 - 64位DLL

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

有什么办法可以解决这个问题。

期待您的帮助。

问候, 嘎

+0

可能需要更多信息:您是否在64位Vista上运行?你能够使用C#应用程序中的32位dll吗? – 2009-06-04 09:11:02

+0

如果您在64位操作系统上运行此操作,请仔细检查是否尚未在“构建”选项卡中将CPU类型设置为x86。 (可能是这种情况,如果你以前使用过32位DLL和64位操作系统) – 2009-06-04 09:20:15

+0

我只检查了它的x64。 – 2009-06-04 09:25:55

回答

0

尝试使用工具“dependency walker”(类似于ldd的win工具,www.dependencywalker.com)来找出与什么相关的链接。可能会有所帮助。

0

我的猜测是依赖,新的DLL可能有一些失踪的64位DLL的需要。

+0

当我检查使用依赖沃克它没有显示任何依赖这个DLL。所以我无法猜测这里有什么问题。 – 2009-06-04 09:26:50

0

检查你正在构建dll的不同版本(x86/x64)的位置。

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

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

0

感谢您的帮助。

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

感谢, 嘎

-1

我有一个问题,这个曾经沿着这些路线。我有一个C++ DLL作为一个硬件的接口,我需要从C#调用。但是,如果没有插入硬件,它将导致DllImport调用失败。这是因为DLL初始化函数返回失败,所以C#只是说它无法加载DLL,它可能不是与该DLL是。

检查您是否在您的C代码中设置DLL时导致某种错误。

相关问题