Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2009, 20:49   #1
Filil
 
Регистрация: 15.09.2008
Сообщений: 3
По умолчанию создание компонента из dll

здравствуйте, хочу создать компонент на форме (например кнопку), используя процедуру создания компонента, заложенную в dll-ке.

главный модуль:


unit ButtUnit;

interface

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

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
A: TMenuItem;
Button1: TMenuItem;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure ButtCreate(Form:TForm); external 'ButtDLL' index 1;
implementation

{$R *.dfm}

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

end.


библиотека:

library ButtDLL;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
Classes,
StdCtrls,
Forms;

{$R *.res}
procedure ButtCreate(Form:TForm);
var But:TButton;
begin
But:=TButton.Create(Form);
But.Left:=50;
But.Top:=50;
But.Parent:=Form ;
end;

exports ButtCreate index 1;

begin
end.


отладчик выдает ошибку на строчке в библиотеке :

But.Parent:=Form ;

помогите, пожалйста, как ее можно устранить?
Filil вне форума Ответить с цитированием
Старый 14.09.2009, 20:53   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Попробуй без этой строки, ведь при создании ты уже указывал Form:But:=TButton.Create(Form);

Цитата:
procedure ButtCreate(Form:TForm);
И вновь мое знаменитое Гы-Гы! Лучше все таки убрать лишнюю "t", а то вдруг еще кто-то посмотрит в словарь)))
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 14.09.2009, 21:02   #3
Filil
 
Регистрация: 15.09.2008
Сообщений: 3
По умолчанию

а без этой строки компонент создается, только его не видно...
visible не прокатит

Последний раз редактировалось Filil; 14.09.2009 в 21:26.
Filil вне форума Ответить с цитированием
Старый 14.09.2009, 22:16   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

В приложении и dll разные наборы классов (линкуются разные копии модулей vcl со своими секциями инициализации). Поэтому передавайте класс в dll. Тогда Вы сможете создать и использовать объект этого класса.

Код:
library testdll;
uses
  SysUtils,
  Forms,
  StdCtrls,
  Classes;

{$R *.res}

type TButtonClass = class of TButton;
procedure CreateButton(Form:TForm; C:TButtonClass);
var B:TButton;
begin
   B := C.Create(Form);
   B.Left:=50;
   B.Top:=50;
   B.Parent := Form;
end;

exports CreateButton;

begin
end.

//..............................................
uses StdCtrls;

type TButtonClass = class of TButton;
procedure CreateButton(Form:TForm; C:TButtonClass); external 'testDll';

procedure TForm22.FormCreate(Sender: TObject);
begin
   CreateButton(Self, TButton);
end;
alexBlack вне форума Ответить с цитированием
Старый 14.09.2009, 23:04   #5
Filil
 
Регистрация: 15.09.2008
Сообщений: 3
По умолчанию

alexBlack, спасибо большое за помощь!
Filil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание компонента Neobrat Компоненты Delphi 3 01.05.2009 09:52
создание компонента Bayazet Общие вопросы Delphi 4 17.12.2008 16:48
Создание компонента russianstrike Компоненты Delphi 15 01.10.2008 19:22
Посылаем адресс компонента в dll Altera Общие вопросы Delphi 23 28.04.2008 20:36
Посылаем адресс компонента в dll Altera Общие вопросы Delphi 0 27.04.2008 05:50