【问题标题】:64 bit dll in 64 bit process Vista fails - Unable to load DLL 'dllname': The specified module could not be found64 位进程 Vista 中的 64 位 dll 失败 - 无法加载 DLL 'dllname':找不到指定的模块
【发布时间】:2009-06-04 07:04:26
【问题描述】:

我有一个本机 C 代码,我在 vc++ 2008 中编译了代码,并在配置管理器中使用“x64”作为平台编译,我有一个 c# 应用程序,它也使用“x64”作为平台编译,它调用 dll功能。我已经使用 Dllimport 从 dll 中调用函数,如下所示。

using System.Runtime.InteropServices;

namespace test            
{    
public partial class Form1 : Form                                                     
  {

      [DllImport("mtest", CharSet = CharSet.Ansi)]
        public extern static void e_path(string path);

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("test");
            swe_set_ephe_path("E:\\Gan");
        }
    }
}

在运行应用程序时,我收到如下错误:

在 test.exe 中发生了“System.DllNotFoundException”类型的未处理异常

附加信息:无法加载 DLL 'mydll':找不到指定的模块。 (HRESULT 异常:0x8007007E)

请您帮我解决这个问题。如果我同时运行 dll 和应用程序,它的工作正常。但是我需要从我的 ASP 页面调用 dll 函数,所以我需要 dll 和应用程序都是 64 位的。

附加信息:当我使用 64 位的依赖遍历器检查 dll 的依赖关系时,它显示 Kernel32.dll 和 NTDLL.DLL 和 mydll.dll 是 x64。

请帮帮我。

提前致谢,

【问题讨论】:

  • 你能解释一下当你说“如果我同时运行 dll 和应用程序它工作正常”时你的意思。 [原文]
  • 我的意思是如果 dll 是 32 位的并且我在 x86 平台下运行的应用程序可以正常工作。
  • 我建议你试试 ProcessMonitor - technet.microsoft.com/en-us/sysinternals/bb896645.aspx - 看看到底出了什么问题。它将向您展示加载库和相应依赖项的所有尝试,并可能引导您找到解决方案。

标签: c# c++ visual-studio-2008 visual-c++ dll


【解决方案1】:

在 x64 平台上,SYSWOW64 目录包含 32 位应用程序的文件。 您会在注册表中发现相同的区别,其中 SYSWOW64 包含 x32 应用程序的条目。 问候

注释:包含 32 位条目的注册表项是 Wow6432Node,位于 //HKEY_LOCAL_MACHINE

【讨论】:

  • 这帮助我解决了另一个问题。感谢您发布此内容。
【解决方案2】:

问题是您的 dll 依赖于其他 dll,而其他 dll 无法定位,因为它位于加载程序不搜索它的某些路径上,或者该 dll 不是 64 位。

【讨论】:

  • 当我使用dependency walker 64-bit检查dll的依赖时它显示Kernel32.dll和NTDLL.DLL和mydll.dll是x64。
猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 2011-08-12
  • 2019-10-09
  • 2012-09-22
  • 2018-05-29
  • 2018-08-13
  • 2020-02-15
  • 2010-10-23
相关资源
最近更新 更多