Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2009, 14:31   #1
Kompuklumba
 
Регистрация: 18.10.2009
Сообщений: 2
Вопрос обработка объектов при помощи DLL

К сожелению не смог найти аналогичных тем или вопросов в сети. Сразу прошу извинения, если задам тупой вопрос.

Опишу в чем суть проблемы. Есть библиотечка с модальным окном, я ее одгружаю динамически и вызываю окно, в которое передаю экземпляр своего класса. После освобождения по FreeLibrary исчезает и сам экземпляр.
Код:
// GD - основной объект с которым работаю внутри главного модуля 
// SubGD - нужен для того чтоб не передавть на прямую GD(просто думал  
//что из- за прямой передачи касяк) 

procedure TFrmMain.ActGenDataExecute(Sender: TObject); 
var 
  SubGD: TGeneralData; 
  HandleProc: THandle; 
  ShowGD : procedure(AppHandle:THandle; var GD:TGeneralData;  
      AdmDB: string;CityDB:string); stdcall; 

begin 
 // подгружаю DLL 
  HandleProc := LoadLibrary(GenData); 
  if HandleProc > 32 then 
  begin 
 // создаю еще один экземпляр класса (так как через основной вообще 
 // не работает) 

    SubGD := TGeneralData.Create; 
    SubGD.Assign(GD); 
    // подгружаю метод библиотеки 
    ShowGD := GetProcAddress(HandleProc,'ShowGenData'); 
    // вызываю 
    ShowGD(Application.Handle,SubGD, DBDir + DBAdmRn, DBDir + DBCity); 
    // передаю данные в основной экземпляр 
    GD.Assign(SubGD); 
    // грохаем лишний объект 
    SubGD.Free; 
    SubGD := nil; 
   
    Application.ProcessMessages; 
    // тут еще пока существует объект GD 
    FreeLibrary(HandleProc); 
    //  а тут уже нет 
  end; 
end;
Прошу строго не судить за такой вопрос, я по образованию строитель

Последний раз редактировалось Stilet; 19.10.2009 в 09:40.
Kompuklumba вне форума Ответить с цитированием
Старый 19.10.2009, 09:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А проблема то в чем?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.10.2009, 10:29   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
SubGD.Free; 
    SubGD := nil; 
   
    Application.ProcessMessages; 
    // тут еще пока существует объект GD 
    FreeLibrary(HandleProс);
Так Вы не освобождаете объект, он и будет у Вас жить дальше.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 19.10.2009, 11:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
он и будет у Вас жить дальше.
Почему? Я всегда думал что .Assign делает именно переопределение а не экземпляр на обьект. А потом автор вызывает SubGD.Free, и по идее связанный с ним SubGD.Assign(GD); тоже должен бахнуться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2010, 15:20   #5
Kompuklumba
 
Регистрация: 18.10.2009
Сообщений: 2
По умолчанию

Не много задержался с ответом, но вопрос решен! следует использовать модуль Sharemem - тогда проблем не произойдет
Kompuklumba вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показ в TPanel и (или) TTabSheet, объектов из плагинов dll nixstill Общие вопросы Delphi 4 19.09.2009 21:26
Проблема при открытии базы при помощи ADO SlavaSH БД в Delphi 21 30.06.2009 16:51
Обработка событий динамически созданных объектов в С++ Builder Shafty Помощь студентам 1 26.02.2009 16:11
передача объектов как параметров функций в Dll Umen Общие вопросы Delphi 9 12.11.2006 19:31