64位进程中64位dll Vista失败 - 无法加载DLL“dllname”:找不到指定的模块

时间:2009-06-04 07:04:26

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

我有一个原生的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位。

附加信息:当我使用依赖性walker检查64位依赖dll它显示Kernel32.dll和NTDLL.DLL以及mydll.dll是x64。

请帮我解决这个问题。

先谢谢,

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

问题是你的dll依赖于其他一些dll而且其他dll无法定位,因为它位于加载器不搜索它或dll不是64位的某个路径上。