Главная страница
    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.5 MB
Время: 0.026 c
1-1087385395
AlexTregubov
2004-06-16 15:29
2004.07.04
Свой скроллинг


3-1086755105
HeathRow
2004-06-09 08:25
2004.07.04
Символ окончания строки


3-1086853160
Dream
2004-06-10 11:39
2004.07.04
добавление записей в Access (ADO)


14-1086700096
hgd
2004-06-08 17:08
2004.07.04
Расстояние до объекта


3-1086538714
gfr
2004-06-06 20:18
2004.07.04
Как сделать Секундомер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский