Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подгружаемые модули, subj 
:(
    Опции темы
Гость_Anton
Дата 29.10.2003, 18:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Проблема такая есть главное приложение, подключаю dpl c формой

unit Unit2;

interface

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

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

initialization
form2 := TForm2.Create(Application);
form2.Show;
end.

форма 2 должна быть MDIChild как это сделать?
  Вверх
Unregistered
Дата 29.10.2003, 18:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











По отношению к главной форме приложения
  Вверх
gray_k
Дата 29.10.2003, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: 3
Всего: 22



Form2.FormStyle:=fsMDIChild


--------------------
С уважением.
Gray.
PM MAIL   Вверх
Unregistered
Дата 30.10.2003, 12:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











тогда Access Vioalation
  Вверх
Unregistered
Дата 30.10.2003, 12:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











поправка

Cannot create form. No MDI forms are currenty active
  Вверх
man2002ua
Дата 30.10.2003, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



ну так сделай главную форму fsMDIForm


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Unregistered
Дата 30.10.2003, 13:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











она такая и есть
  Вверх
man2002ua
Дата 30.10.2003, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



а покажи файл dpr


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Unregistered
Дата 30.10.2003, 13:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ActnList, XPStyleActnCtrls, ActnMan, StdCtrls;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Start1: TMenuItem;
procedure Start1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FPackageHandle: THandle;
procedure LoadPluginPackage;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LoadPluginPackage;
var
FileName: TFileName;
begin
FileName:='C:\plugins\package1.bpl';
FPackageHandle:=LoadPackage(FileName);
end;

procedure TForm1.Start1Click(Sender: TObject);
begin
LoadPluginPackage;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnloadPackage(FPackageHandle);
end;

end.
  Вверх
Unregistered
Дата 30.10.2003, 13:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
  Вверх
man2002ua
Дата 30.10.2003, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



самое первое, что приходит в голову - это то, что плагин ничего не знает о главном Application...
я попробовал передать объект Application - запускается и работает, но при закрытии главной формы - каскад ошибок

Это сообщение отредактировал(а) man2002ua - 30.10.2003, 15:24


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Unregistered
Дата 30.10.2003, 15:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как сделать что бы знал?
  Вверх
Unregistered
Дата 30.10.2003, 15:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Добавить в requred пакаджа главную форму проекта?
  Вверх
Unregistered
Дата 30.10.2003, 15:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











я попробовал передать объект Application - запускается и работает, но при закрытии главной формы - каскад ошибок

вышлите плиз
  Вверх
man2002ua
Дата 30.10.2003, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Цитата
вышлите плиз

нечего высылать, это неверное решение :-\

// package
var
GlobalMemoryPointerForApplication: DWORD;
initialization
GlobalMemoryPointerForApplication := <я передавал руками, чтобы быстрее было>
Application := TApplication(GlobalMemoryPointerForApplication);
form2 := TForm2.Create(Application);
form2.Show;
end.



--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
man2002ua
Дата 30.10.2003, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Цитата
Добавить в requred пакаджа главную форму проекта?


Наиболее правильное решение :-) Вот только если это плагин - тогда неверное

Это сообщение отредактировал(а) man2002ua - 30.10.2003, 16:16


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
man2002ua
Дата 31.10.2003, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



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

главный модуль:
Код

procedure TForm1.Start11Click(Sender: TObject);
var X: Integer;
   iObj: TInterPackage;
begin
 iObj := TInterPackage.Create;
 if not iObj.Init(sizeof(DWORD)) then
 begin
   MessageDlg(iObj.LastErrorText, mtError, [mbOK], 0);
   exit;
 end;
 X := Integer(@Application);
 if not iObj.WriteData(@X) then
 begin
   MessageDlg(iObj.LastErrorText, mtError, [mbOK], 0);
   exit;
 end;
 H := LoadPackage('C:\PROJECTS\PluginLoad\Package1.bpl');
 iObj.Free;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 //if h <> 0 then UnloadPackage(H); - слет при выгрузке :)
end;


модуль пакета:
Код

var
 Form2: TForm2;
 X: Integer;
 lpA: ^TApplication;
 iObj: TInterPackage;

implementation

{$R *.dfm}

initialization
 iObj := TInterPackage.Create;
 if not iObj.Init(sizeof(DWORD)) then
 begin
   MessageDlg(iObj.LastErrorText,mtError,[mbok],0);
   exit;
 end;
 if not iObj.ReadData(@X) then
 begin
   MessageDlg(iObj.LastErrorText,mtError,[mbok],0);
   exit;
 end;
 lpA := pointer(X);
 Application := lpA^;
 Form2 := TForm2.Create(nil);
 Form2.Show;

end.


доп. модуль, чтобы передать указатель из приложения в пакет (через mapped file):
Код

unit InterProc;

interface

uses
 Windows, Messages, SysUtils;

const IPACK_NAME = 'GLOBAL_PACKAGE_PARAMETER1';

type
 TInterPackage = class(TObject)
   Hmap: Integer;
   lpMap: Pointer;
   szData: Integer;
   function Init(iszData: DWORD; Name: string = IPACK_NAME): Boolean;
   procedure Free;
   function WriteData(lpData: Pointer): Boolean;
   function ReadData(lpData: Pointer): Boolean;
 public
   LastErrorText: string;
 end;

implementation

procedure TInterPackage.Free;
begin
 if lpMap <> nil then UnmapViewOfFile(lpMap);
 if Hmap > 0 then CloseHandle(Hmap);
 lpMap := nil;
 Hmap := 0;
end;

function TInterPackage.Init(iszData: DWORD; Name: string): Boolean;
begin
 Result := FALSE;
 szData := iszData;
 Hmap := CreateFileMapping(THANDLE($FFFFFFFF),nil, PAGE_READWRITE or
    SEC_COMMIT, 0, szData, PChar(Name));
 if Hmap <= 0 then
 begin
   LastErrorText := 'Ошибка создания вирт. файла ' + inttostr(GetLastError());
   exit;
 end;
 lpMap := MapViewOfFile(Hmap, FILE_MAP_ALL_ACCESS, 0, 0, szData);
 if lpMap = nil then
 begin
   LastErrorText := 'Ошибка проецирования файла ' + inttostr(GetLastError());
   CloseHandle(Hmap);
   Hmap := 0;
   exit;
 end;
 Result := TRUE;
end;

function TInterPackage.WriteData(lpData: Pointer): Boolean;
begin
 Result := FALSE;
 if lpMap = nil then
 begin
   LastErrorText := 'Нет проекции файла!';
   exit;
 end;
 MoveMemory(lpMap, lpData, szData);
 Result := TRUE;
end;

function TInterPackage.ReadData(lpData: Pointer): Boolean;
begin
 Result := FALSE;
 if lpMap = nil then
 begin
   LastErrorText := 'Нет проекции файла!';
   exit;
 end;
 MoveMemory(lpData, lpMap, szData);
 Result := TRUE;
end;

end.



--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Unregistered
Дата 3.11.2003, 16:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Работая дальше получил следующую ошибку
На Form1 лежит компонент TSQLConnection, на форме2 лежит TSQLDataSet где в поле SQLConnection указан Form1.TSQLConnection в момент LoadPackage вылазит ошибка

Аpplication is not licensed to use this feature


  Вверх
man2002ua
Дата 3.11.2003, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Оп-па smile.gif ну и изврат smile.gif) Щас попробую. Поборники грамотности извините, предлагаю ввести список слов, подлегаемых автоисправлению. Например: "Щас" - "сейчас" и т.д.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
man2002ua
Дата 4.11.2003, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



После initialization в package поставь MainInstance := GetModuleHandle(nil); ...
Пришлось раскрутить rtl.bpl, чтобы понять, чего ж ему надо - оказалось он ищет ресурс DVCLAL в подключенных модулях, если MainInstance = 0. А оно почему-то равно 0...


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Unregistered
Дата 11.11.2003, 14:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Пошел немножко по другому пути но проблеммы с MDIChilds все равно остались. У меня 2 вопроса
1. что означают строки и для чего они нужны
lpA := pointer(X);
Application := lpA^;
2. Как можно избавится от ACCESS VIOALATION при выгрузке пакета
  Вверх
man2002ua
Дата 11.11.2003, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



1) изврат, но осталось как есть - передача Application через указатель
2) не выгружать пакет... или восстанавливать перед выгрузкой все данные (Application, и .тп.)


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Unregistered
Дата 11.11.2003, 15:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Application восстанавливаю все равно AV
  Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0925 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.