DllNotFoundException: Не удается загрузить DLL

431
04 октября 2017, 06:43

Установил через диспетчер пакетов nuget библиотеку pjsua. используя using подключаю ее и все нормально, могу использовать классы и методы. В reference она тоже добавлена. Однако при компиляции получаю ошибку DllNotFoundException.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using pjsip4net.Accounts;
using System.Runtime.InteropServices;
using org.pjsip.pjsua2;
using System.IO;
namespace WindowsFormsApp2
{

    public partial class Form1 : Form
    {
        class MyAccount : Account
        {
            public override void onRegState(OnRegStateParam prm)
            {
                base.onRegState(prm);
                System.Console.WriteLine("*** On registration state: " + prm.code.ToString() + prm.reason.ToString());
            }
        }
        public Form1()
        {
            InitializeComponent();
            Endpoint endpoint = new Endpoint();
            endpoint.libCreate();
            EpConfig config = new EpConfig();
            endpoint.libInit(config);
            TransportConfig transportConfig = new TransportConfig();
            transportConfig.port = 5060;
            AccountSipConfig accountSipConfig = new AccountSipConfig();
            AccountCallConfig accountCallConfig = new AccountCallConfig();

            AccountConfig accountConfig = new AccountConfig();
            accountConfig.regConfig.registrarUri = "sip:pjsip.org";
            accountConfig.idUri = "sip:test@pjsip.org";
            accountConfig.callConfig = accountCallConfig;
            AuthCredInfo authCredInfo = new AuthCredInfo("digest", "*", "test", 0, "secret");
            accountSipConfig.authCreds.Add(authCredInfo);
            accountConfig.sipConfig = accountSipConfig;

            MyAccount myAccount = new MyAccount();
            myAccount.create(accountConfig);
        }
    }
}
Answer 1

Порядок поиска для dll библиотки:

  1. Текущий каталог, где лежит запускаемое приложение
  2. Системная папка C:\Windows\system32 или C:\Windows\SysWOW64 (папка системных библиотек для запуска 32-разрядных приложений на 64-разрядной Windows), но можно положить в оба места (если не поможет - можно в конечном счете удалить библиотеку из системной папки).
  3. Чтение из переменной окружения Path

Соответственно, советов несколько:

  1. Проверить наличие библиотеки в текущем рабочем каталоге, при отсутствии вставить библиотеку в этот каталог. Если библиотека есть, но ошибка падает - перейти к шагу два
  2. Скопировать библиотеку в системную папку (в зависимости от разрядности процессора), если не помогло - перейти к шагу три
  3. Проверить в деталях исключения, откуда пытается загрузить библиотеку приложение и положить ее туда

Можно проверить зависимости DLL, поисковик зависимостей предоставляемый Visual Studio, может помочь, его можно бесплатно скачать: Dependency Walker

Ссылка на источник: Unable to load DLL (Module could not be found HRESULT: 0x8007007E)

READ ALSO
Почему нельзя сложить в C# byte + byte?

Почему нельзя сложить в C# byte + byte?

Я знаю что нужно выполнить преобразование типов, но хотел бы разобраться в механизмеПочему этот код выдает ошибку?

307
Работа с usb устройствами

Работа с usb устройствами

Есть примерно 10 USB устройств подключенных через USB-хабДля работы с устройствами есть библиотека производителя

289
Keep alive of TCP connection

Keep alive of TCP connection

Добрый день

245
Вопрос по С# Перелистывание графика

Вопрос по С# Перелистывание графика

Всем приветВопрос возможно глупый, но я новичок в с#

275