Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

Ошибка при модальном вызове формы из DLL. Я в отчаянии!   Найти похожие ветки 

 
Knapweed ©   (2004-06-16 01:24) [0]

Уважаемые мастера! Прошу помощи!!! Я в глубоком отчаянии.. Код:

(в основной программе)
procedure TMainForm.LabExportClick(Sender: TObject);
begin
ExportDLLHandle := LoadLibrary("KExport");
if ExportDLLHandle = 0 then begin
 MessageDlg("Ошибка загрузки библиотеки KExport.dll.", mtError, [mbOk], 0);
 exit;
                            end;
try
 @DLLShowExport := GetProcAddress(ExportDLLHandle, PCHar("ShowExport"));
 DLLShowExport(Config.CurrentArea);
finally
 if FreeLibrary(ExportDLLHandle)=False then
  MessageDlg("Ошибка выгрузки библиотеки.",mtError, [mbOk], 0);
end;
end;


(в KExport.DLL)
function ShowExport(CurArea : byte) : TModalResult;
begin
BCurArea := CurArea;
try
 FormExport := TFormExport.Create(Application);
  try
   result := FormExport.ShowModal;
  except
   ShowMessage("Здесь как раз и выходит эта Ё..я ошибка!!!");
   result := mrAbort;
  end;
finally
 FormExport.Free;
end;
end;


Причём всё работало, пока мне не приспичило включить модуль ShareMem в библиотеку(нужно было передавать строку). Тут-то всё и посыпалось :( Потом я всё вернул на место, НО ОШИБКА ОСТАЛАСЬ! ПОЧЕМУ???


 
Knapweed ©   (2004-06-16 01:30) [1]

Забыл сказать, что ошибка выглядит примерно так: не могу сделать модальным уже видимое окно...
Примечание: свойство FormExport.VISIBLE=FALSE.


 
GuAV ©   (2004-06-16 01:34) [2]


> TFormExport.Create(Application);

TFormExport.Create(nil); ?


 
Knapweed ©   (2004-06-16 01:36) [3]

2GuAV
То-же самое :(


 
GuAV ©   (2004-06-16 01:41) [4]

А если переименовать форму в библиотеке?


 
Knapweed ©   (2004-06-16 01:42) [5]

Эта мысль тоже приходила мне в голову... Пробовал переименовать в MyFormExport - та же самая фигня :(


 
GuAV ©   (2004-06-16 01:51) [6]


>  Потом я всё вернул на место, НО ОШИБКА ОСТАЛАСЬ! ПОЧЕМУ???

по меньшей мере странно. такого не бывает. убрал sharemem и в проге и в либе? build сделал?


 
Knapweed ©   (2004-06-16 01:56) [7]

2GuAV
В том то и чертовщина... Даже сделал поиск ShareMem по всем файлам проекта - нигде нету.


 
GuAV ©   (2004-06-16 02:01) [8]

А оно точно работает если форму в приложение вставить, а не в библиотеку?

Не тот ли это случай, что (Program) Application <> (library) Application?


 
zuk   (2004-06-16 02:03) [9]

У меня подобная проблема, правда не в DLL а в BPL
В проекте вдруг ни с того ни с сего перестали поджигаться модально окна, выводится такая же ошибка (не могу сделать модальным уже видимое окно).
Временно победил тем что перед ShowModal пишу Visible := False, помогает, но не приятное мигание окна. Но это уже из разряда шаманство, хотелось бы знать что это :-(
ЗЫ: у меня D7.


 
GuAV ©   (2004-06-16 02:05) [10]

да, в либе Application.ShowMainForm:=False помогает?


 
Knapweed ©   (2004-06-16 02:06) [11]

В приложение всё перетаскивать я не пробовал. Разрабатывал сразу в DLL. Но даже если заработает, то каким образом мне это поможет? Необходимо сделать всё в библиотеке.


 
Knapweed ©   (2004-06-16 02:10) [12]

2zuk
> Visible := False
Я и так тоже пробовал... Мне не помогло :(


 
GuAV ©   (2004-06-16 02:11) [13]

[10] - ?


 
zuk   (2004-06-16 02:13) [14]

[9] - ?


 
Knapweed ©   (2004-06-16 02:14) [15]

2GuAV
>[10] - ?
[9] - не то же самое?


 
zuk   (2004-06-16 02:14) [16]

Думаем, а если в дизайнере поставить сразу Visible - False?


 
GuAV ©   (2004-06-16 02:15) [17]


> [9] - ?

Ну да, на [9] может быть поможет [10]


 
Knapweed ©   (2004-06-16 02:17) [18]

2zuk
>в дизайнере поставить сразу Visible - False?
Дык это у меня с самого начала так и стояло. Периодически проверяю - так и стоит.


 
GuAV ©   (2004-06-16 02:20) [19]


> [9] - не то же самое?

нет. создай новый пустой проэкт и посмотри visible у главной формы. да? а ведь она видна.


 
Knapweed ©   (2004-06-16 02:29) [20]

2GuAV
>[19]
Думаю, я тебя понял.
У меня в библиотеке только одна форма - FormExport, и она и есть главная.


 
GuAV ©   (2004-06-16 02:35) [21]

если она главная, то она в списке auto-create, а это имхо не нужно


 
Knapweed ©   (2004-06-16 02:46) [22]

2GuAV
Она главная настолько, насколько может быть главной форма в DLL-ке. Но даже если она стоит в auto-create, раньше же всё работало(перед вознёй с ShareMem)? Какая тут связь с ShareMem?


 
Knapweed ©   (2004-06-16 04:17) [23]

Может ещё кто-нибудь мысли хорошие подкинет, а?
Я ещё буду заглядывать сюда...
Последняя надежда - этот форум... :(


 
_alex_   (2004-06-17 14:31) [24]

> Knapweed
Чем закончилась твоя история с отображением формы?

Дело в том, что я сейчас начинаю переносить некоторые формы из своего приложения в dll.
Единственное отличие - я делаю статический вызов dll.
А прочитав эту ветку даже не знаю - может не стоит этим заниматься, что бы когда-нибудь не наткнуться на тоже самое.



Страницы: 1 вся ветка

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.038 c
3-1086674008
SLP
2004-06-08 09:53
2004.07.04
Поле Identity


4-1085401908
Oleg
2004-05-24 16:31
2004.07.04
Полупрозрачная форма


14-1087391414
Ega23
2004-06-16 17:10
2004.07.04
Жена только что позвонила.


14-1087112602
Kolyan
2004-06-13 11:43
2004.07.04
Linux Mandrake 10


4-1085490669
миша
2004-05-25 17:11
2004.07.04
помогите в написании драйвера для нестанд устройства