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

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

неявное связывание с bpl [XP]


Страницы:   1 2

sydenis ©   (2007-10-01 14:54:00) 

если использовать функцию из bpl путём неявного связывания со своей программой типа
unit MyProg;
......
function FuncFromBPL: Byte; stdcall; external 'MyPackage.bpl';

то обязательно надо ставить галочку "build with runtime packages"?
Как-то неудобно это - сразу вся VCL и всё прочее выгружается в пакеты... А хотелось бы как с dll - всё в exeшнике, и что-то выборочно из dll


Игорь Шевченко   (2007-10-01 15:43:00) [21]


> И, кстати, в том пакете функция объявлена именно как stdcall
> (зачем???), или ты это так, написал потому что где-то увидел?
>


AFAIK на имя экспортируемой фукнции влияет.


sydenis   (2007-10-01 15:41:00) [22]


> в том пакете функция объявлена именно как stdcall (зачем?
> ??), или ты это так, написал потому что где-то увидел?

да - просто "где-то увидел"...     а в bpl нормальный (паскалевский) порядок аргументов?

> Можно не ставить.

Вот и я пробовал не ставить и всякий раз ловил AV, хотя судя по отладчику управление нормально передавалось в пакет, но функция не исполнялась. Правда там (в функции) было создание новой формы, т.е. как раз использование RTL/VCL...  значит всё-таки без глаки не обйтись?
D2007


DrPass   (2007-10-01 15:10:00) [23]


> то обязательно надо ставить галочку "build with runtime
> packages"?

Не обязательно. Но если твоя функция использует что-либо из RTL/VCL, то без этой галочки будет нехорошо :)
Т.к. пакет-то тянет зависимости только из других пакетов, а в твоем приложении будет вкомпилирована своя собственная копия RTL.
И, кстати, в том пакете функция объявлена именно как stdcall (зачем???), или ты это так, написал потому что где-то увидел?


Сергей М.   (2007-10-01 15:07:00) [24]


> обязательно надо ставить галочку "build with runtime packages"?


Не обязательно.


Игорь Шевченко   (2007-10-01 15:07:00) [25]


> то обязательно надо ставить галочку "build with runtime
> packages"?


Можно не ставить.

package MyPkg;

.....
requires
 rtl;

contains
 PkgMain in 'PkgMain.pas';

end.

unit PkgMain;

interface

function Foo: Integer; stdcall;

exports Foo;

implementation
uses
 Windows;

function Foo: Integer;
begin
 Result := MessageBox(HWND_DESKTOP, 'Foo has been called', 'Package', MB_OK);
end;

end.

program PkgUser;

uses
 Forms,
 main in 'main.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

function Foo: Integer; stdcall; external 'MyPkg.bpl';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Foo;
end;

end.


sydenis   (2007-10-01 14:57:00) [26]

про LoadPackage и GetProcAddress просьба не рассказывать - интересует именно вышеописанный случай


Страницы:   1 2

Наверх

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