2009-06-04 7 views
0

У меня есть собственный код C, я скомпилировал код в vC++ 2008 и скомпилировал его с помощью 'x64' as платформу в менеджере конфигурации, и у меня есть приложение C#, которое также скомпилировано с помощью «x64» в качестве платформы и вызывает функцию dll. Я использовал Dllimport для вызова функции из dll, как показано ниже.64-разрядная dll в 64-разрядном процессе Vista не удалась - Не удалось загрузить DLL-имя 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"); 
     } 
    } 
} 

в момент запуска приложения я получаю сообщение об ошибке, как показано ниже:

Необработанное исключение типа «System.DllNotFoundException» произошло в TEST.exe

Дополнительная информация: Невозможно загрузить DLL 'mydll': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)

Не могли бы вы помочь мне решить эту проблему. Если я запустил как dll, так и приложение, он работает нормально. Но мне нужно, чтобы функции dll вызывались с моих ASP-страниц, поэтому мне нужно как dll, так и приложение как 64-битное.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: когда я проверил DLL для зависимости с помощью зависимостей ходунка для 64-разрядного Это показывает, что Kernel32.dll и NTDLL.DLL и MyDll.dll является x64.

, пожалуйста, помогите мне с этим.

Спасибо заранее,

+0

Можете ли вы объяснить, что вы имеете в виду, когда вы говорите: «Если я бегу как DLL и applicaition его работает отлично.» [sic] –

+0

Я имею в виду, если dll 32 бит, а приложение i под платформой x86 работает нормально. –

+0

Я предлагаю вам попробовать ProcessMonitor - http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx - чтобы узнать, что именно происходит. Он покажет вам все попытки загрузить библиотеки и соответствующие зависимости и, вероятно, приведет вас к решению. – sharptooth

ответ

0

Проблема заключается в том, что ваша DLL зависит от некоторых других DLL и другие библиотеки DLL не может быть расположена, потому что на каком-то пути, где загрузчик не искать для него или что DLL не является 64-битным.

+0

, когда я проверил DLL для зависимости с помощью ходячего зависимого 64-битного. Это показывает, что файлы Kernel32.dll и NTDLL.DLL и mydll.dll равны x64. –

3

На платформах x64 каталог SYSWOW64 содержит файлы для 32-разрядных приложений. Вы найдете такое же различие в реестре, где SYSWOW64 содержит записи для приложений x32. Привет

Комментарий: ключ реестра, содержащий записи 32bit является Wow6432Node и находится в // HKEY_LOCAL_MACHINE

+0

Это помогло мне с другой проблемой. Спасибо, что опубликовали это. – tronious

 Смежные вопросы

  • Нет связанных вопросов^_^