Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 22.12.2017, 17:03   #1
Masam
Пользователь
 
Регистрация: 19.11.2009
Адрес: Россия, Красноярский кр., Снежногорск.
Сообщений: 13
Репутация: 10
По умолчанию Не выгружается DLL (C#) из делфи.

Добрый день.
Не могу понять почему не могу выгрузить библиотеку.
Есть библиотека классов написанная на C# (регистрируется через RegAsm), её код:
Код:

using System;
using System.Runtime.InteropServices;

namespace ololo
{
    [ComVisible(true)]
    public class Test //: IDisposable
    {
        public bool GetYesNo(String str)
        {
            if (str.Equals("yes"))
                return true;
            else
                return false;
        }
    }
}

Есть вызов библиотеки через OLE на делфи:
Код:

procedure TForm1.Button1Click(Sender: TObject);
var
  sValue: WideString;
  dllCom: OleVariant;
  sPath,error : BOOL;
begin
  sPath := false;
  error := false;
  sValue := Edit2.Text;
  try
    dllCom:= CreateOleObject('ololo.test');
    try
      sPath := dllCom.GetYesNo(sValue);
    except
      sPath := false;
      error := true;
    end;
  finally
    Finalize(dllCom);
  end;
  if error = false then
  begin
    if sPath then Label1.Caption:='yes' else Label1.Caption:='no';
  end else Label1.Caption:='Ошибка!';
end;

Вызов метода "GetYesNo" происходит корректно, получаю результат, но после "Finalize(dllCom) или dllCom:=Unassigned;" библиотека остается висеть в оперативной памяти, так как не удается удалить файл библиотеки (самое забавное что его можно вырезать и вставить в другую папку). Пробовал так же без вызова "GetYesNo", результат тоже, везде пишут, что если нет указателей на объект он должен автоматически разрушиться, но почему то этого не происходит. Подскажите пожалуйста, что я делаю не так?
__________________
О_о
Masam вне форума   Ответить с цитированием
Старый 22.12.2017, 18:43   #2
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,994
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

сомневаюсь что код выгружается. это считается не безопасной операцией как бы
Цитата:
что если нет указателей на объект он должен автоматически разрушиться
DLL != Com-объект.
первая врятли будет выгружена как я сказал.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 22.12.2017, 18:57   #3
Masam
Пользователь
 
Регистрация: 19.11.2009
Адрес: Россия, Красноярский кр., Снежногорск.
Сообщений: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
сомневаюсь что код выгружается. это считается не безопасной операцией как бы

DLL != Com-объект.
первая врятли будет выгружена как я сказал.
Тогда я совсем не понимаю, как происходит в подобных случаях обновления, как мне тогда выгрузить код DLL?
И почему я могу переместить файл библиотеки (через MoveFile или через ctrl+X)?
__________________
О_о

Последний раз редактировалось Masam; 22.12.2017 в 19:00.
Masam вне форума   Ответить с цитированием
Старый 23.12.2017, 03:19   #4
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,994
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

Цитата:
Сообщение от Masam Посмотреть сообщение
Тогда я совсем не понимаю, как происходит в подобных случаях обновления, как мне тогда выгрузить код DLL?
не видел ни одного обновления чтоб не требовало перезапуска, либо происходило прям в рантайме.

Цитата:
Сообщение от Masam Посмотреть сообщение
И почему я могу переместить файл библиотеки (через MoveFile или через ctrl+X)?
вы можете переместить только в пределах раздела.
перемещение не срывает дескрипторы открытого файла(они работают не через путь)
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 25.12.2017, 15:20   #5
Masam
Пользователь
 
Регистрация: 19.11.2009
Адрес: Россия, Красноярский кр., Снежногорск.
Сообщений: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы можете переместить только в пределах раздела.
перемещение не срывает дескрипторы открытого файла(они работают не через путь)
Благодарю, за внесение ясности!
__________________
О_о
Masam вне форума   Ответить с цитированием
Ответ



Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel не выгружается из памяти Raikhman Microsoft Office Excel 2 01.06.2016 14:12
DLL в делфи demigod82 Помощь студентам 4 17.02.2012 18:00
dll и делфи Pein95 Общие вопросы Delphi 5 26.12.2010 09:28
Выгружается FAR после досовских программ alexcoder Софт 4 18.08.2010 19:02




01:57.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru