Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Вниз

MDI Form в DLL ошибка Can not assign TFont to TFont при OnHint   Найти похожие ветки 

 
Balu   (2002-08-15 21:28) [0]

Ситуация такова - главная форма приложения является fsMDIForm, затем я загружаю DLL, передаю ей значения Application и Screen, показываю окно fsMDIChild. Все отлично.
А далее, при попытке показать подсказку возникает ошибка "Can""not assign TFont to TFont".
Код библиотеки:
library mdidll;
uses
SysUtils,
Classes,
Forms,
Windows,
MDILIB in "MDILIB.pas" {frmMDI_dll};

var
DLLApp: TApplication;
DLLScr: TScreen;

procedure InitPlugin(App, Scr: integer); StdCall;
begin
DLLScr := Screen;
Screen := TScreen(Scr);
DLLApp := Application;
Application := TApplication(App);
end;

procedure DonePlugin; StdCall;
begin
if DLLScr <> nil then Screen := DLLScr;
Application := DLLApp;
end;

function CreateMDI: integer; StdCall;
begin
Result := integer(TfrmMDI_dll.Create(Application));
end;

exports
InitPlugin,
DonePlugin,
CreateMDI;

begin
end.


Код программы
type
TInitProc = procedure(App, Scr: integer); StdCall;
TDoneProc = procedure; StdCall;
TCreateProc = function: integer; StdCall;
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FLib := LoadLibrary(PChar("mdidll.dll"));
@InitPlugin := GetProcAddress(FLib, PChar("InitPlugin"));
@InitPluginbalu := GetProcAddress(FLib, PChar("InitPluginbalu"));
@DonePlugin := GetProcAddress(FLib, PChar("DonePlugin"));
@CreateMDI := GetProcAddress(FLib, PChar("CreateMDI"));
InitPlugin(integer(Application), integer(Screen));
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
DonePlugin;
FreeLibrary(FLib);
end;
procedure TfrmMain.NewDLL1Click(Sender: TObject);
var X: TForm;
begin
X := TForm(CreateMDI);
end;


Подскажите, пожалуйста, что и как.

Пример кода взял с КОРОЛЕВСТВА DELPHI


 
Ученик   (2002-08-15 21:47) [1]

А что написано в OnHint ?


 
McSimm   (2002-08-16 10:41) [2]

Проблема в том, что одноименные классы в DLL и EXE - это разные классы. И Assign между ними невозможен.

При таком подходе при внедрении меню MDI формы в меню главной формы эта ошибка и происходит.

Есть несколько путей:
1. Отказаться от слияния меню. (но потенциально возможны другие проблемы)

2. Откомпилировать и DLL и EXE с использованием r/t package Vcl??.bpl Тогда и переназначения Application и Screen делать не придется - они и так общие.

3.Отказаться от DLL и создавать MDI в BPL. При этом подходе также придется использовать vcl??.bpl


 
Игорь Шевченко   (2002-08-16 10:49) [3]

McSimm © (16.08.02 10:41)

3-ий путь наиболее правильный. Во втором есть подводные камни, в частности, нельзя DLL линковать статически, необходимо использовать только динамическую загрузку.

С уважением,


 
McSimm   (2002-08-16 11:42) [4]

Маленькая поправка.
Не заметил, что ситуация возникает при OnHint.
Суть проблемы - та же, только ошибка Assign не при слиянии меню, а при создании хинта.

>Игорь Шевченко © (16.08.02 10:49)
Полностью согласен.


 
McSimm   (2002-08-16 11:59) [5]

>Balu © (15.08.02 21:28)
Андрей это ты :)
А я и не заметил.

У меня появилась идея насчет твоей проблемы. Если докопаюсь - сообщу.

>moderator
извиняюсь за личную переписку.


 
Balu   (2002-08-16 18:52) [6]

Спасибо McSimm за
http://www.delphikingdom.com/mastering/plugins.htm
Переделал систему через BPL всё заработало отлично.



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

Форум: "Основная";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-95699
Gavver
2002-08-08 16:30
2002.08.29
Помогите с NTX


7-95997
Lizard
2002-06-13 21:27
2002.08.29
Как удалить файл без возможности его востановления ?


1-95899
CCCatch
2002-08-18 19:38
2002.08.29
Удаление всех символов кроме цифр.


4-96031
eruc
2002-06-26 16:23
2002.08.29
Application with taskbar interface


3-95720
maxim2
2002-08-09 07:39
2002.08.29
Есть ли у DBGrid событие реагирующие когда пользователь перешел..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский