Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 8
1

Использование unmanaged dll в ASP.NET

09.07.2015, 14:29. Показов 1393. Ответов 9
Метки нет (Все метки)

Здравствуйте!

Использую в проекте ASP.NET MVC dll-ку на unmanaged c++.
На локальной машине всё работает, либа лежит в папке "bin". А на хостинге получаю "Unable to load DLL 'mylib.dll'".

Гугление принесло понимание, что IIS не находит либу по путям известным ему из переменной окружения "Path". Советуют установить эту переменную с помощью: System.Environment.SetEnvironmentVariable("Path", ...

Но я не могу понять какой путь туда поставить? Я же не знаю абсолютного пути на сервере хостера!

Подскажите, пожалуйста, как решить проблему?! Может быть есть другие способы увидеть dll?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 14:29
Ответы с готовыми решениями:

Использование LIKE в LINQ в ASP.NET MVC
в SQL Server есть база с таблицей Smetas в ней поле Str nchar(5) там есть записи : 01 0101...

Использование API в ASP.NET MVC
У меня есть пример запроса на создание виртуальной машины из документации по vCloud API: POST...

Использование xml файлов для хранения данных в проектах asp.net mvc3
Всем привет, нужно сохранять данные модели не в базе даных а в xml файле, может ктото пробовал...

ASP.NET MVC 4,ASP.NET MVC 4.5 и ASP.NET MVC 5 большая ли разница между ними?
Начал во всю осваивать технологию,теперь хочу с книжкой посидеть и вдумчиво перебрать всё то что...

9
628 / 568 / 165
Регистрация: 17.07.2012
Сообщений: 1,616
Записей в блоге: 1
09.07.2015, 15:50 2
snowpard, привет, dll-ка скомпилена под какую платформу? x86?
Локально стоит винда x86? На хостинге?

Вангую: На хостинге стоит x64 Винда, dll-ка cобрана под x86. Решение: IIS > Application Pool > Advanced Settings > Allow 32-bit applications = true.
1
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 8
09.07.2015, 16:01  [ТС] 3
Спасибо, Cupko!

Dll под х86 точно, локальная винда тоже. А вот на хостинге - хз. Буду выяснять.
А решение: IIS > ... я должен же на хостинге сделать? Боюсь, что мне это не позволено...
0
628 / 568 / 165
Регистрация: 17.07.2012
Сообщений: 1,616
Записей в блоге: 1
09.07.2015, 16:20 4
snowpard, Пишите в саппорт, что нужна поддержка 32-битных приложений для вашего Application Pool в IIS. Ну, других вариантов у меня нет.
0
2469 / 1917 / 345
Регистрация: 22.07.2011
Сообщений: 7,274
09.07.2015, 20:57 5
Цитата Сообщение от snowpard Посмотреть сообщение
Но я не могу понять какой путь туда поставить? Я же не знаю абсолютного пути на сервере хостера!
https://msdn.microsoft.com/en-... s.90).aspx

- а вашу Unmanaged dll можно загрузить через импортируемую LoadLibrary , уж ее то точно найдет в системных dll.

System.Environment.SetEnvironmentVariable
- работает с реестром , вряд ли у вашего приложения будут такие полномочия на хосте = SecurityException
1
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 8
09.07.2015, 21:12  [ТС] 6
sau, спасибо!

MapPath ничего не изменил. SecurityException тоже не было.

А за идею с LoadLibrary, спасибо отдельное ! Пробую...
0
2469 / 1917 / 345
Регистрация: 22.07.2011
Сообщений: 7,274
09.07.2015, 21:15 7
MapPath ничего не изменил
А он ничего и не меняет , - способ получить абсолютный путь до папки с веб.приложением , далее , этот путь + относительный путь к dll , указываете в LoadLibrary
0
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 8
10.07.2015, 10:52  [ТС] 8
Что-то не выплясывается у меня с LoadLibrary!
Вот такой код, приведённый на десятке найденных форумах, у всех, кроме меня, прекрасно работает:

C#
1
2
3
4
5
        [DllImport("kernel32.dll", EntryPoint = "LoadLibrary", CallingConvention = CallingConvention.Winapi)]
        private static extern IntPtr LoadLibrary(string dllfile);
 
        IntPtr mydll = Marshal.AllocHGlobal(sizeof(int));
        mydll = LoadLibrary("mydll.dll");
Пробую на локальной машине. LoadLibrary возвращает ноль. У DllImport перепробовал все варианты параметров.
0
2469 / 1917 / 345
Регистрация: 22.07.2011
Сообщений: 7,274
10.07.2015, 13:26 9
Лучший ответ Сообщение было отмечено Metall_Version как решение

Решение

Почему путь к dll относительный ? - полный укажите.
http://www.pinvoke.net/default... brary.html
- и , что возвращает GetLastWin32Error ?
1
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 8
11.07.2015, 19:35  [ТС] 10
Да, нужен полный путь - LoadLibrary заработала! Спасибо!

Теперь беда с получение функции из либы. На локалхосте получает, а на хостинге нет. Код ошибки 127 - "процедура не найдена".



[UPD]
Оказывается проблема не просто в получении функции из dll! GetProcAdress адрес-то отдаёт. Но потом, при получении из него делегата, получается ноль:

C#
1
2
3
4
5
IntPtr dll = LoadLibrary("mydll.dll"); //OK
IntPtr address = GetProcAddress(dll, "FuncName"); //ОК
 
FuncDelegate func;
func = (FuncDelegate)Marshal.GetDelegateForFunctionPointer(address, typeof(FuncDelegate)); // null
И опять же на локале всё работает!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2015, 19:35

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как переделать проект ASP.NET WebForms в ASP.NET MVC 5
Есть маленький проектик, который я выращиваю. Началось всё с ASP.NET 4 WebForms (.Net Framework...

Стоит ли изучать ASP.NET MVC 4 не зная просто ASP.NET?
Стоит ли сразу изучать ASP.NET MVC не зная просто ASP.NET? И еще вопрос: мне нужно освоить MVC...

Миграция с Asp.NET на Asp.NET MVC. Ошибка в маршрутизации
Всем привет. Есть проект(ИС на чистом Asp.NET) который нужно перенести на Asp.NET MVC. Не...

Использование ActiveX Dll в ASP
Попробовал подключить к ASP файлам ActiveX Dll'ку в которую вынес наиболее часто используемые мной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.