Суббота, 18.05.2024, 12:48
 

Меню сайта

Форма входа
Друзья сайта
Статистика
Наш опрос
Соскучились ли Вы по университету?
Всего ответов: 96
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: SPA  
Форум » Помощь студентам! » Delphi » Класс в dll
Класс в dll
ГенрихДата: Пятница, 13.03.2009, 22:09 | Сообщение # 1
*-=Главный спамер=-*
Группа: Монтигомо Ястребиный Коготь
Сообщений: 185
Награды: 0
Замечания: 0%
Статус: OffLine
собственно вопрос, как с помощью делфи считать класс из dll
пусть у мну в библиотеке находится класс Tkrevedko
и я хочу создать переменную такого типа в программе...
Как импортировать функцию я знаю и везде описано, а про класс не нашел cry



Пушистый Краб
 
AdminДата: Пятница, 13.03.2009, 23:44 | Сообщение # 2
General Admin
Группа: Администраторы
Сообщений: 502
Награды: 0
Статус: OffLine
Quote (Генрих)
собственно вопрос, как с помощью делфи считать класс из dll
пусть у мну в библиотеке находится класс Tkrevedko
и я хочу создать переменную такого типа в программе...
Как импортировать функцию я знаю и везде описано, а про класс не нашел cry

К сожалению, класс из DLL средствами Delphi экспортировать невозможно. Для этих целей используются пакеты.

Все о пакетах здесь: http://wm-help.net/books-online/book/56472/56472-96.html

В общем модуле:

Code
type
    Tkrevedko = class;
    TkrevedkoClass = class of Tkrevedko;
    TkrevedkoFunc = function: TkrevedkoClass;

    Tkrevedko = class(TForm) // или TFrame, или TComponent
    public
      procedure Action1; dynamic; abstract;
      function Status1: Integer; dynamic; abstract;
    end;

В принципе, это фактически написание COM интерфейса, только без регистрации.

В плагине:

Code
type
    Tkrevedko1 = class(Tkrevedko)
    public
      procedure Action1; override;
      function Status1: Integer; override;
    end;

function GetKrevedkoClass: TKrevedkoClass;
begin
    Result := Tkrevedko1;
end;

exports
    GetKrevedkoClass;

В вызывающей программе:

Code
var
    hLib: THandle;
    Func: TkrevedkoFunc;
begin
    hLib := LoadLibrary('krevedko1.dll');
    if hLib <> 0 then
    begin
      Func := TkrevedkoFunc(GetProcAddress(hLib, 'GetKrevedkoClass'));
      if Assigned(Func) then
      begin
        Krevedko := Func.Create(nil);  // срабатывает виртуальный конструктор
        Krevedko.Action1;
        if Krevedko.Status1 <> 0 then
          Krevedko.Action1;
        // и т. д.
      end
      else
        // не найдена функция
    end
    else
      // библиотека не найдена
end;

Вот статья по работе с bpl-пакетами.
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=274

Удачи


Умное лицо - это еще не признак ума. Все глупости в мире совершаются именно с этим выражением лица... Улыбайтесь господа, улыбайтесь!
 
ГенрихДата: Воскресенье, 15.03.2009, 22:57 | Сообщение # 3
*-=Главный спамер=-*
Группа: Монтигомо Ястребиный Коготь
Сообщений: 185
Награды: 0
Замечания: 0%
Статус: OffLine
Спасибо, буду разбираться wink


Пушистый Краб
 
AdminДата: Среда, 18.03.2009, 23:33 | Сообщение # 4
General Admin
Группа: Администраторы
Сообщений: 502
Награды: 0
Статус: OffLine
Пожалуйста angel

Умное лицо - это еще не признак ума. Все глупости в мире совершаются именно с этим выражением лица... Улыбайтесь господа, улыбайтесь!
 
Форум » Помощь студентам! » Delphi » Класс в dll
  • Страница 1 из 1
  • 1
Поиск:




Администратор сайта - Алена © 2024

Ваш
IP: 18.223.99.24