Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

form in dll [D6, Win2k]


SeF ©   (2002-06-18 16:03:00) 

Здраствуйте!
проблема:
после загрузки dll из этой процедуры при переключении фокуса/завершении программы вылетает ошибка www.seff.pisem.net/images/error.jpg (40k)


procedure TForm1.button1Click(Sender: TObject);
var
res:pchar;
hnd:integer;
showedit:function:pchar;
begin
hnd:=loadlibrary("editdll.dll");
if hnd<=32 then begin messagebox(self.Handle,pchar("Не удалось загрузить редактор!"+#13+#13+"Обратитесь к разработчику за обновлением/консультацией"),pchar(self.Caption),0); exit; end;
showedit:=nil;
try
@showedit:=GetProcAddress(hnd,pchar("showedit"));
if @showedit=nil
then
messagebox(self.Handle,pchar("Не удалось загрузить редактор!"),pchar(self.Caption),0)
else
res:=showedit;
finally
freelibrary(hnd);
end;
end;


кусок из dll:


function showedit:pchar; stdcall;
var
res:integer;
begin
try
form2:=tform2.Create(nil);
// form2.Load(string(Fname));
res:=form2.ShowModal;
except
application.messagebox({pchar}"Не удалось открыть файл!",nil);
result:=pchar(inttostr(mrAbort));
// form2.Release;
end;
result:= pchar(inttostr(res));
// form2.Release;
end;

заранее спасибо!


SeF   (2002-06-19 00:34:00) [1]

oomneeq BIG 10ks понял, разобрался...


SeF   (2002-06-18 23:51:00) [2]

oomneeq
фокус- в смысле активизирую другую программу.......
нет не слыхал, я первый раз форму в dll запихиваю.....


oomneeq   (2002-06-18 20:12:00) [3]

A про то что Application"ы и соответственно обработчики Exception"ов в приложении и dll разные слыхал?


Вот здесь например у тебя application чей будет?

>except
> application.messagebox({pchar}"Не удалось открыть >файл!",nil);


>после загрузки dll из этой процедуры при переключении фокуса/завершении программы вылетает ошибка

Хм, так когда конкретно?
Что за фокус? Чей? куда переключается?
Форма то хоть успевает показаться?

Вот тут был?
http://src.fitkursk.ru/articles/art0000038.asp


Игорь Шевченко   (2002-06-18 17:30:00) [4]

Тогда отладчик в руки.


sef   (2002-06-18 17:04:00) [5]

Игорь Шевченко ©
это весь кодкоторый работает с библиотекой(1-я процедура). если она не вызывается то при выходе/смене фокуса ни каких ошибок......


Игорь Шевченко   (2002-06-18 16:42:00) [6]

Skier © (18.06.02 16:30)

А какая разница, откуда она берется ? Главное, чтобы совпадали calling conventions.

Автору:
Или я не вижу грубой ошибки в тексте или приведено мало текста и ошибка возникает по другой причине.


sef   (2002-06-18 16:32:00) [7]

убирал stdcall, также pchar, function сделал procedure тоже самое... ничего не пойму.......


Игорь Шевченко   (2002-06-18 16:30:00) [8]

ShowEdit : function : Integer;


Skier   (2002-06-18 16:30:00) [9]

> Игорь Шевченко
Мне кажется, что функция-то берётся из DLL
значит нужно указывать как передаются параметры.
Или нет ?


Игорь Шевченко   (2002-06-18 16:27:00) [10]

Skier © (18.06.02 16:22)

А что в нем неправильного ?


sef   (2002-06-18 16:26:00) [11]

не помогло, проблема таже..... таже ошибка в техже местах......


Skier   (2002-06-18 16:22:00) [12]

> Игорь Шевченко
Да ?!
Ты считаешь что объявление
showedit:function:pchar; - правильное ?


Игорь Шевченко   (2002-06-18 16:19:00) [13]

stdcall абсолютно не имеет значения.

PChar в данном случе возвращать не надо, так как он ссылается в никуда


Skier   (2002-06-18 16:09:00) [14]

Пробуй это
...........
type
TShowEdit= function : PChar; stdcall;
var
res:pchar;
hnd:integer;
showedit:TShowEdit;
...........

И про stdcall не забывай.


Наверх

Титульная страница Поиск, карта сайта Написать письмо