Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Интерфейсы...   Найти похожие ветки 

 
GanibalLector ©   (2006-06-08 23:21) [0]

Есть главное приложение,в нем находиться TPopupMenu. Есть библиотеки(с формами),некоторые компоненты на этих формах должны иметь TPopupMenu одинакового "формата".
Соответсвенно,дабы не плодить TPopupMenu на каждую форму решил брать ее из главного приложения.
Делал через интерфейсы. В общем-то сделал... все вышло,но от Лукавого,т.к. ничего другого в голову не лезло(пришлось вызывать LoadLibrary из библиотеки на главное приложение).

Собственно,код :

Главное приложение :


IPopup = interface
["{F3B3F5EB-0E26-417C-8509-5734C71458BE}"]
 function GetPopup:Pointer;
end;

type
TPop = class(TInterfacedObject,IPopup)
   function GetPopup:Pointer;
 end;
 ...
 var
  Form1: TForm1;
  PPop:TPop;
 ...

function TPop.GetPopup: Pointer;
begin
 Result:=Form1.PopupMenu1;
end;

function GetPopup: IPopup;stdcall;
begin
 PPop:=TPop.Create;
 Result:=PPop as IPopup;
end;

exports
 GetPopup;




Библиотеки с формами (этот код и не нравиЦа) :

 ...
 var hMain:HWND;
 GetPopup :function : IPopup;stdcall;
 FPopup:IPopup;
begin

 hMain:=LoadLibrary(PChar(Application.ExeName));
 if hMain<>0 then
 begin
   GetPopup:=GetProcAddress(hMain,"GetPopup");
   if Assigned(GetPopup) then
   begin
     FPopup:=GetPopup;
     if Assigned(FPopup) then
      StringGridEx1.PopupMenu:=FPopup.GetPopup;
   end;
   FreeLibrary(hMain);
 end;



Вот и вопрос назрел...насколько это правильно (или как сделать правильно)???

Заранее спасибо!


 
evvcom ©   (2006-06-09 08:26) [1]

Какая разница, что ты сделал через интерфейсы или делал бы без них. В результате ты все равно приходишь к присвоению свойству типа dll.TPopupMenu объекта exe.TPopupMenu, пусть даже эти адреса ты вычислил с извращениями через интерфейсы. Если ты не используешь runtime packages, то код твой некорректен.


 
GanibalLector ©   (2006-06-09 09:47) [2]

Еще предложения будут?

2 evvcom ©   (09.06.06 08:26) [1]
runtime packages не собираюсь использовать в силу некоторых причин.


 
vl_chel ©   (2006-06-09 11:57) [3]

Код очень сомнительный и не совсем логичный. Смысл из библиотеки вызывать библиотеку ?????
Вы попутали библиотеку и главное приложение.
В библиотеке должна быть функция ShowWindow(PopUp: IPopup)



Страницы: 1 вся ветка

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
15-1150800117
Megabyte
2006-06-20 14:41
2006.07.23
Преимущества/удобства использования Dll и BPL


15-1151066974
Сатир
2006-06-23 16:49
2006.07.23
Тенниска с вентилятором


1-1150060251
leonidus
2006-06-12 01:10
2006.07.23
Как прочесть юникодную строку из буфера обмена


2-1151949475
HBreaker
2006-07-03 21:57
2006.07.23
Ошибка CoInitialize has not been called


15-1149594374
Проходящий
2006-06-06 15:46
2006.07.23
Прорыв в математике: доказана еще одна теория