![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 не забывай.