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

Вниз

DBE + динамическая загрузка пакета   Найти похожие ветки 

 
FOX   (2003-05-29 13:30) [0]

Приветствую всех.

Суть вопроса в следующем: имеется приложение, которое динамически загружает пакет.
Приложение компилируется с выключенной опцией “Build with runtime packages”. При загрузке
пакета выдается сообщение “Application is not licensed to use this feature”. При отладке выяснилось, что в конструкторе объекта TdataSet ищется ресурс с именем “DVCLAL” и если он его не находит, то генерится Exception с выше сказанным текстом (MainInstance=0, а в пакете нет такого ресурса). Так вот сам вопрос: корректно ли инициализировать MainInstance пакета значением MainInstance приложения (по образу передачи Application.Handle, на простейшем примере работает).

Пояснения к коду
TForm1-форма основного приложения.
_Execute-экспортируема из пакета функция.
TdataSetNew – полностью аналогичен TdataSet.
TFormLoadBPL-форма из пакета.

Загрузка пакета из приложения
procedure TForm1.Button1Click(Sender: TObject);
type TPackagepExec = procedure(const Handle: HWND; mInstance: LongWord); stdcall;
var FPackageHandle : HMODULE;
ExecProc : TPackagepExec;
begin
FPackageHandle := LoadPackage( ExtractFilePath( Application.ExeName) + "testBPL5.bpl");
if FPackageHandle = 0 then RaiseLastWin32Error()
else begin
@ExecProc := GetProcAddress( FPackageHandle, "_Execute");
if Assigned(ExecProc)
then ExecProc( Application.Handle, MainInstance)
else raise Exception.Create("Invalid Package File");
end;
UnloadPackage( FPackageHandle);
end;

Вызываемая функция из пакета
procedure _Execute(const Handle: HWND; mInstance: LongWord); stdcall;
var sHandle: HWND;
sInstance: LongWord;
begin
sHandle := Application.handle;
Application.handle := Handle;
sInstance := MainInstance;
MainInstance := mInstance;
FormLoadBPL := TFormLoadBPL.Create( Application);
try
FormLoadBPL.showmodal;
finally
FormLoadBPL.free;
end;
Application.handle := sHandle;
MainInstance := sInstance;
end;
//тестовый код
procedure TFormLoadBPL.Button2Click(Sender: TObject);
var ds : TDataSetNew;
begin
ds := TDataSetNew.Create(nil);
ds.free;
end;


 
Desdechado   (2003-05-29 14:28) [1]

1. БДЕ при чем?
2. зачем такие извраты?


 
FOX   (2003-05-29 15:05) [2]

To Desdechado

>>1. БДЕ при чем?
Да по большому счету ни причем (просто изначально проблема выявилась при создании TQuery(и копалось в сторону BDE), а уж потом выяснились что дело в базовом классе TDataSet)

>>2. зачем такие извраты?
А в чем собственно изврат, в динамической загрузке пакета?
Собирать приложение с включенной опцией “Build with runtime packages”, есть вариант забыть
какой-нибудь пакет(больше похоже на отговорки). Делать все это в dll – размер (реализовано сейчас). А так уже больше спортивный интерес.

С наилучшими пожеланиями FOX.



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

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

Наверх





Память: 0.45 MB
Время: 0.024 c
1-84270
Project111
2003-06-14 11:21
2003.06.26
Version info


1-84390
VISA
2003-06-09 13:47
2003.06.26
Во всех ли версиях Дельфи есть возможность работы с TIniFile


3-84032
Инна
2003-06-01 01:55
2003.06.26
FastReport


3-83892
PaulSin
2003-06-03 08:56
2003.06.26
Оптимизация запроса


3-83928
Ler
2003-06-03 13:57
2003.06.26
Вопрос по LocalSQL





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