Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.11.2009, 16:21
s0manmbula s0manmbula вне форума
Прохожий
 
Регистрация: 06.11.2009
Сообщения: 16
Репутация: 10
Вопрос Помещение компонента в DLL

Есть такая проблема: надо поместить компонент в dll - например ImageList. При нажатие на кнопку в приложении динамически загрузить dll в память, взять оттуда ImageList и назначить его например главному меню приложения. В интернете нигде нету информации, как такое делать...
Буду очень благодарен за помощь...

Последний раз редактировалось s0manmbula, 06.11.2009 в 17:50.
Ответить с цитированием
  #2  
Старый 06.11.2009, 16:28
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от s0manmbula
Есть такая проблема: надо поместить компонент в dll - например ImageIndex. При нажатие на кнопку в приложении динамически загрузить dll в память, взять оттуда ImageIndex и назначить его например главному меню приложения. В интернете нигде нету информации, как такое делать...
Буду очень благодарен за помощь...
Что за компонент ImageIndex? ImageIndex это обычный Integer у некоторых компонентов, может быть надо в DLL поместить TBitmap'ы или TIcon?
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #3  
Старый 06.11.2009, 17:53
s0manmbula s0manmbula вне форума
Прохожий
 
Регистрация: 06.11.2009
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от AleD
Что за компонент ImageIndex? ImageIndex это обычный Integer у некоторых компонентов, может быть надо в DLL поместить TBitmap'ы или TIcon?

Уже исправил - компонент ImageList...
Ответить с цитированием
  #4  
Старый 06.11.2009, 18:03
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от s0manmbula
Уже исправил - компонент ImageList...
Всё очень просто, в dll пихаешь эту фугкцию:
Код:
function GetImageList: Pointer;
var
  ilImages: TImageList;
begin
  ilImages := TImageList.Create(nil);
  // ...
  Result := @ilImages; //нужный TImageList
end;
а в приложение
Код:
procedure GetImages;
type
  TGetImageListProc = function: Pointer;
const
  libname = 'mylib.dll';
  procName = 'GetImageList';
var
  lib: Cardinal;
  proc: TGetImageListProc;
  newImages: TImageList;
begin
  lib := LoadLibrary(pchar(libname));
  if(lib<>-1)then
  begin
    proc := GetProcAddress(lib,procName);
    if(proc<>nil)then
      newImages := proc^;
  end;
end;
на компиляторе не проверял, будут ошибки - репорть
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #5  
Старый 06.11.2009, 18:38
s0manmbula s0manmbula вне форума
Прохожий
 
Регистрация: 06.11.2009
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от AleD
Всё очень просто, в dll пихаешь эту фугкцию:
Код:
function GetImageList: Pointer;
var
  ilImages: TImageList;
begin
  ilImages := TImageList.Create(nil);
  // ...
  Result := @ilImages; //нужный TImageList
end;
а в приложение
Код:
procedure GetImages;
type
  TGetImageListProc = function: Pointer;
const
  libname = 'mylib.dll';
  procName = 'GetImageList';
var
  lib: Cardinal;
  proc: TGetImageListProc;
  newImages: TImageList;
begin
  lib := LoadLibrary(pchar(libname));
  if(lib<>-1)then
  begin
    proc := GetProcAddress(lib,procName);
    if(proc<>nil)then
      newImages := proc^;
  end;
end;
на компиляторе не проверял, будут ошибки - репорть
На строку
Код:
newImages := proc^;
компилятор выдает ошибку:

[DCC Error] Unit1.pas(210): E2010 Incompatible types: 'TImageList' and 'procedure, untyped pointer or untyped parameter'
Ответить с цитированием
  #6  
Старый 06.11.2009, 18:47
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

тогда так:
Код:
function GetImageList: Pointer;
var
  ilImages: TImageList;
begin
  ilImages := TImageList.Create(nil);
  // ...
  Result := @ilImages; //нужный TImageList
end;
а в приложение
Код:
Код:
procedure GetImages;
type
  PImageList = ^TImageList;
  TGetImageListProc = function: PImageList;
const
  libname = 'mylib.dll';
  procName = 'GetImageList';
var
  lib: Cardinal;
  proc: TGetImageListProc;
  newImages: TImageList;
begin
  lib := LoadLibrary(pchar(libname));
  if(lib<>-1)then
  begin
    proc := GetProcAddress(lib,procName);
    if(proc<>nil)then
      newImages := proc^;
  end;
end;
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #7  
Старый 06.11.2009, 19:06
s0manmbula s0manmbula вне форума
Прохожий
 
Регистрация: 06.11.2009
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от AleD
тогда так:
Код:
function GetImageList: Pointer;
var
  ilImages: TImageList;
begin
  ilImages := TImageList.Create(nil);
  // ...
  Result := @ilImages; //нужный TImageList
end;
а в приложение
Код:
Код:
procedure GetImages;
type
  PImageList = ^TImageList;
  TGetImageListProc = function: PImageList;
const
  libname = 'mylib.dll';
  procName = 'GetImageList';
var
  lib: Cardinal;
  proc: TGetImageListProc;
  newImages: TImageList;
begin
  lib := LoadLibrary(pchar(libname));
  if(lib<>-1)then
  begin
    proc := GetProcAddress(lib,procName);
    if(proc<>nil)then
      newImages := proc^;
  end;
end;
Спасибо большое за помощь!!! Все работает!!! Надо учится работать с указателями...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter