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

Вниз

Недавно увидел статью....   Найти похожие ветки 

 
litt   (2006-10-02 15:02) [0]

В которой ктото спрашивал:
"Как вызвать MDI форму из DLL",
По всем вопросом и ответам прошолся.... Не получилось...
Какие я повторил ошибки или может не допонял???

DLL:

library dCardMDI;

uses
 SysUtils,
 Classes,
 Forms,
 uCardMDI in "uCardMDI.pas" {CardForm};

var
 DLLApp: TApplication;
 DLLScr: TScreen;

{$R *.res}

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

procedure DonePlugin; StdCall;
begin
 Screen:= DLLScr;
 Application:= DLLApp;
end;

function CreateCardMDI: integer; StdCall;
begin
 Result:= integer(TCardForm.Create(Application))
end;

exports
 InitPlugin,
 DonePlugin,
 CreateCardMDI;

begin
end.


Вызываю при нажатии на кнопку....:

unit uMainForm;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, ToolWin, Menus;

type

 TMainForm = class(TForm)
   mTop: TMainMenu;
   N1: TMenuItem;
   mToolB: TToolBar;
   ToolButton1: TToolButton;
   StatusB: TStatusBar;
   ToolButton2: TToolButton;
   ToolButton3: TToolButton;
   N2: TMenuItem;
   procedure N2Click(Sender: TObject);

 private
   { Private declarations }

 public
   { Public declarations }

 end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.N2Click(Sender: TObject);
var
 CardHandle: THandle;
 ff:tt;
begin
 CardHandle:= LoadLibrary("dll\Card\dCardMDI.dll");
 GetProcAddress(CardHandle,"CreateCardMDI");
 FreeLibrary(CardHandle);
end;

end.


 
Карелин Артем ©   (2006-10-02 15:24) [1]


>  CardHandle:= LoadLibrary("dll\Card\dCardMDI.dll");
Загрузили DLL
>  GetProcAddress(CardHandle,"CreateCardMDI");
Получили адрес
>  FreeLibrary(CardHandle);
Освободили??

А где сама работа?


 
clickmaker ©   (2006-10-02 15:29) [2]


> litt   (02.10.06 15:02)

а че за статья, и че не получилось?


 
guav ©   (2006-10-02 15:38) [3]

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


Интересный способ "обойти" запрет переавать Delphi-классы между модулями :-)  нет, всё равно это опасный приём.
MDI никогда не применял. но рекомендую поискать способ передавать хендлы окон а не классы.


 
clickmaker ©   (2006-10-02 16:13) [4]


> Интересный способ "обойти" запрет переавать Delphi-классы
> между модулями

а чего такого? Более того, к integer приводить ничего и не надо. Главное, чтобы и хост-экзе и DLL были собраны с одними и теми же RT-пакетами.


 
REA   (2006-10-02 17:06) [5]

Делал MDI в DLL. Работает со скрипом.


 
clickmaker ©   (2006-10-02 17:41) [6]

лучше даже делать не MDI в DLL, а MDI в EXE. А в DLL - Frame с начинкой для mdi-child


 
guav ©   (2006-10-02 17:51) [7]

> [4] clickmaker ©   (02.10.06 16:13)


> а чего такого?


Две проблемы:
1.
> Главное, чтобы и хост-экзе и DLL были собраны с одними и
> теми же RT-пакетами.
, причём можно использовать классы только из этих пакетов.
и эти пакеты должны быть в виде отдельных .bpl , иначе могут быть проблемы (например, с операторами is и as).
2. Разные менеджеры памяти. Строки в классах можно менять только в одном из модулей, инае будут ошибки.


 
clickmaker ©   (2006-10-02 18:22) [8]


> эти пакеты должны быть в виде отдельных .bpl

ну да, а как иначе?

> Разные менеджеры памяти

borlndmm.dll в помощь


 
guav ©   (2006-10-02 18:48) [9]

> [8] clickmaker ©   (02.10.06 18:22)


> > эти пакеты должны быть в виде отдельных .bpl


> ну да, а как иначе?


Ну если так то и вторая проблема снимается.
Просто непонятно, зачем тогда классы к integer приводить.



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

Форум: "Прочее";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.062 c
2-1160053115
Anto}{a
2006-10-05 16:58
2006.10.22
Таблица


15-1159418753
Climber
2006-09-28 08:45
2006.10.22
sql-запросы


2-1159520154
Василий Блаженный
2006-09-29 12:55
2006.10.22
BDS2006 vs Delphi 7


2-1159873794
id
2006-10-03 15:09
2006.10.22
Автозапуск


2-1160034080
balagur
2006-10-05 11:41
2006.10.22
Кнопка





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