Главная страница
    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.007 c
14-95942
Александр
2002-08-02 12:48
2002.08.29
Совместимость ПО с Windows XP


1-95740
KPY
2002-08-19 07:42
2002.08.29
В RichEdit можно делать строки разного цвета?


14-95978
AL2002
2002-08-05 11:24
2002.08.29
Нужна фотка козырного баклажана...


1-95807
skandig
2002-08-19 22:06
2002.08.29
диаграммы из Acces


3-95732
Ангелика
2002-08-09 15:38
2002.08.29
Нужно скопировать из текст.файла в таблицу dbf значения...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский