2009-06-04 62 views
0

我有一个本机C代码,我在vC++ 2008中编译代码,并用'x64'编译为平台在配置管理器,我有一个C#应用程序,它也编译为'x64'作为平台,它调用dll函数。我用Dllimport从下面的dll调用函数。在64位过程中的64位DLL Vista失败 - 无法加载DLL'dllname':无法找到指定的模块

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"); 
     } 
    } 
} 

在运行该应用程序我得到如下错误的时间:

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

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

请问你能否帮我解决这个问题。如果我运行的DLL和应用程序的工作正常。但我需要从我的ASP页面调用DLL函数,所以我需要DLL和64位应用程序。

其他信息:当我使用64位依赖walker检查dll的依赖关系它显示Kernel32.dll和NTDLL.DLL和mydll.dll是x64。

请帮我解决这个问题。

由于事先

+0

你能解释一下你的意思是当你说:“如果我同时运行DLL和applicaition其工作的罚款。” [原文如此] – 2009-06-04 07:08:36

+0

我的意思是如果DLL是32位的,我在x86平台下运行的应用程序工作正常。 – 2009-06-04 07:15:06

+0

我建议你尝试ProcessMonitor - http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx - 看看究竟出了什么问题。它会向您显示加载库和对应依赖关系的所有尝试,并可能将您引导至解决方案。 – sharptooth 2009-06-04 09:08:49

回答

0

的问题是,您的DLL依赖于一些其他的DLL和其他DLL无法定位,因为它是在加载程序不会进行搜索或DLL一些道路上不是64位。

3

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

点评:含32位项中的注册表项是Wow6432Node和位于// HKEY_LOCAL_MACHINE

相关问题