64-битная DLL в 64-битном процессе Vista не удается - Невозможно загрузить DLL "имя DLL": указанный модуль не найден - PullRequest
0 голосов
/ 04 июня 2009

У меня есть собственный 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");
        }
    }
}

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

Произошло необработанное исключение типа 'System.DllNotFoundException' в test.exe

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

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

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

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

Заранее спасибо,

Ответы [ 2 ]

3 голосов
/ 09 июня 2009

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

Комментарий: раздел реестра, содержащий 32-битные записи, является Wow6432Node и находится в // HKEY_LOCAL_MACHINE

0 голосов
/ 04 июня 2009

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

...