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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подгружаемые модули, subj 
:(
    Опции темы
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
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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