AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2012, 14:06   #1  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Загруженая dll на C# не выгружается
Есть dll написанная разработчиком оборудования. Эта dll содержит функции управления этим оборудованием. Сделана другая dll на c#, которая использует функции первой dll и представляет интерфейс в виде класса в Х++. Общая логика работы классическая: открытие устройства, вывод в устройство, закрытие устройства. Первый запуск из под axapta - все хорошо. Запуск производился из job. Второй запуск этого job вызывает ошибку - попытка обращения к защищенной памяти. Путем экспериментов, удалось выяснить, что при закрытии устройства очищаются данные и освобождает память в dll сделанной разработчиком оборудования, т.е. после закрытия, dll должна быть освобождена (freelibrary) и для повторного использования должна быть загружена еще раз. Казалось, что логика работы в Axapta будет следующая, job или форма обращаются к C# dll, выполняют необходимые действия и по окончании их вызывают закрытие устройства, завершаются сами (казалось и должны освободить C# dll). Но это не так, dll освобождается только после завершения сеанса Axapta. Попытка выполнить данные действия в отдельном thread не помогла, dll осталась загруженной после завершения thread. Есть ли способ освобождать dll после использования?
Старый 06.04.2012, 15:36   #2  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Слишком сумбурно описано. Не понятно где проблема, то ли в аксапте, то ли в .net обертке, то ли в dll производителя устройства.
Чтобы это выяснить, попробуйте сделать приложение-клиент на C# и в нем использовать .net обертку.
Мое предположение - прокси класс в сборке C# неправильно реализует интефейс IDisposable, либо не вызывается метод Dispose в классе-обертке.
__________________
Sapere aude
Старый 09.04.2012, 07:56   #3  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Проблема именно с axapta. Она после использования не освобождает dll . dll освобождается только после закрытия сеанса axapta. Извините, что не понятно изложил.

C уважением, Дмитрий
Старый 09.04.2012, 11:07   #4  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Задачу удалось решить. Возможно это кому-нибудь пригодится. В С# не требуется указывать явную загрузку dll (в нашем случае dll производителя оборудования), загрузка произойдет автоматически при инициализации класса. В деструктор добавляю поиск hModule этой dll и явно делаю FreeLiblary по количеству загруженных копий. Что бы не было в дальнейшем ошибки при создании экземпляра класса, в конструктор добаляю LoadLiblary. Таким образом не страшно, что в axapta не выгружается dll на С#, сама dll следит за используемыми ресурсами.

С уважением, Дмитрий.
Старый 09.04.2012, 11:10   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А почему не используете dll производителя напрямую в Аксапте без врапера?
__________________
Axapta v.3.0 sp5 kr2
Старый 09.04.2012, 11:15   #6  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Дело в том, что dll производителя, делает загрузку еще нескольких своих dll. И запуск ее на прямую выдавал ошибку загрузки этих dll. Разобраться с причиной такого поведения не удалось. Обвязка на С# вызывает все корректно и представляет интерфейс Х++ прямо к классу.

С уважением, Дмитрий.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
sumitax: Integrating SharePoint 2010 DLL with AX 2009 EP Blog bot DAX Blogs 0 10.12.2010 04:17
Проблема с самописной DLL. VAlek DAX: Программирование 18 28.12.2008 10:37
axStart: Making singleton objects from classes, DLL and CLR’s in AX. Blog bot DAX Blogs 2 04.01.2008 00:48
склонение ФИО и использование dll библиотеки NetBus DAX: Программирование 11 23.10.2007 14:00
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:21.