![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пакеты
ORMADA © (2004-07-05 15:20:00)Всем доб. день! Вот начал юзать пакеты динамически и столкнулся с проблемой как вызвать ф-ию из динамически загружаемого пакета.
в длл было просто- был раздел экспорта в кот всё и указывалось а здесь как ?
Sandman25 (2004-07-07 12:43:00) [1][11] Amoeba © (07.07.04 12:39)
Вот и я о том же. Зачем что-то еще добавлять, если добавляемое только ухудшает ситуацию? Замедление само по себе есть вред, и для его оправдания нужны причины (облегчение использования, понимания, совместимость и т.д.). Без ИМХО.
Sandman25 (2004-07-07 12:41:00) [2][10] Игорь Шевченко © (07.07.04 12:36)
ИМХО данная цитата была бы уместна, если бы выигрыш появлялся при добавлении"редкопонимаемого" модификатора. Почему бы safecall не написать, раз пошла такая пьянка :)
Amoeba (2004-07-07 12:39:00) [3]
> Sandman25 © (07.07.04 12:17) [9]
Естественно, при использовании стандартного соглашения о вызовах быстродействие будет выше.
Кроме того, пакеты все равно не могут использоваться программами, например написанными языках, где нет регистрового вызова. Так что вапорос о совместимости не стоит.
Игорь Шевченко (2004-07-07 12:36:00) [4]Sandman25 © (07.07.04 12:17)
> Так вроде бы при стандартном register используются регистры
> и за счет этого будет выигрыш в быстродействии?
"настоящие программисты используют самомодифицирующий код, особенно в тех случаях, когда это экономит 20 наносекунд
в середине очень короткого цикла"
(с)
Sandman25 (2004-07-07 12:17:00) [5][8] Игорь Шевченко © (07.07.04 12:13)
Так вроде бы при стандартном register используются регистры и за счет этого будет выигрыш в быстродействии?
Игорь Шевченко (2004-07-07 12:13:00) [6]Amoeba © (07.07.04 11:54)
> А нафига нужен stdcall в пакетах (BPL)?
Но и вреда, однако, тоже никакого (с)
Amoeba (2004-07-07 11:54:00) [7]А нафига нужен stdcallв пакетах (BPL)?
Mim1 (2004-07-06 18:56:00) [8]Так вы экспортируете неправильно
> function ShowForm(hOwner: hInst): Boolean; stdcall ; export;
Export ничего не дает.
The directives near, far, and export refer to calling conventions in 16-bit Windows programming. They have no effect in 32-bit applications and are maintained for backward compatibility only.
Нужно так
function ShowForm(hOwner: hInst): Boolean; stdcall;
Exports ShowForm;
ORMADA (2004-07-06 09:36:00) [9]такая фигня в пакете не канает
function ShowForm(hOwner: hInst): Boolean; stdcall; export;
при вызове @ShowForm := getProcAddress(HandlePack, 'ShowForm');
просто не видет адреса
ORMADA (2004-07-06 08:20:00) [10]2 Mim1 мне низя линоковать автоматом т.к. пакеты будут подгружаться динамически и разные юзеры используют и вызывают разные пакеты
в длл был раздел экспорта в пакетах его нету
если просто объявлять в пакете типа
function ShowForm(hOwner: hInst): Boolean; stdcall;
а потом вызывать
type
TShowForm = function(hOwner: hInst): Boolean; stdcall;
var
HandlePack: THandle;
ShowForm: TShowForm;
begin
HandlePack := LoadPackage('Package1.bpl');
if HandlePack > 0 then
begin
@ShowForm := getProcAddress(HandlePack, 'ShowForm');
if addr(ShowForm) <> nil then
ShowForm(Application.Handle)
else
showMessage('Function not exists...');
ничё не получает он не видит адрес ф-ии
как быть ?
Mim1 (2004-07-06 07:58:00) [11]
> [2] ORMADA © (06.07.04 07:44)
> 2 Mim1 как и хде в пакете написать экспорт ф-ии ?
Где угодно (или почти), так же как в DLL.
Только зачем? Вроде пакеты и линкуются автоматом, то есть вы делаете другой модуль, увказываете что при компиляциии нужно использовать пакет, и в uses какого нибудь модуля указывайте модуль из пакета. Вы получите доступ ко всем указанным классам м переменным (и т.д.) из указанного модуля.
ORMADA (2004-07-06 07:44:00) [12]2 Mim1 как и хде в пакете написать экспорт ф-ии ?
Mim1 (2004-07-05 16:50:00) [13]Так же, экспортируй функцию. Или в register регистрируй классы.