-
Подскажите как правильно реализовать следующее:
В основной программе открыта БД через BDE в эксклюзивном режиме. Из DLL, по данным из этой БД, надо построить отчет.
Вопрос: Как правильно обратиться из DLL к этой БД ? ( Открыть отдельную сессию не получится т.к. эксклюзивный досуп к БД )
Просто передача переменной TTable в DLL, вроде как и работает, но не стабильно ( раз через раз слетает программа ).
Очень нужна помощь клуба !!!
-
> Открыть отдельную сессию
-
скомпилировать программу с ран тайм пакетами и передать переменную Table в DLL
-
> скомпилировать программу с ран тайм пакетами и передать
> переменную Table в DLL
Так и делаю, но работает не стабильно.
в DLL:
var
dllBase: TTable;
{$R *.res}
procedure InitReport( _base: TTable ); stdcall;
begin
dllBase:=_base;
end;
procedure RunReport; stdcall;
begin
.....
dllBase.бла бла бла
end;
Вызов из основной программы
var
prgBase: TTable;
InitReport( prgBase ); - тут ошибок не возникает
RunReportRun; - а тут возникают. Статистику набрать в каких случаях не получается т.к. хаотично возникают. Из 5 раз может ни одного не быть, а может и все 5 раз.
--
-
Выкинуть dll, ибо в озвученном контексте она не нужна и бессмысленна.
-
TTable это VCL значит своя собственая RTTI в ДЛЛ
ДЛЛ на помойку
-
Зачем нужна dll?
-
> Зачем нужна dll?
Ну идея что бы отчеты, используемые в программе, формировать именно через dll. Т.е. формирование отчетов вынести из основной программы. Или есть другие способы решения подобной задачи ? Напомню что БД открывается в эксклюзивном режиме. Подскажите правильное решение плиз
-
> Т.е. формирование отчетов вынести из основной программы.
Для чего?
З.Ы. Это не стёб, вопрос серьёзный.
-
> Ega23 (07.11.2011 15:15:08) [8]
Т.е. формирование отчетов вынести из основной программы.
-
> Т.е. формирование отчетов вынести из основной программы.
Это я понял. С какой целью это делается?
Эта dll суть "вещь в себе" и разные клиенты имеют возможность делать свой отчёт "с шахматами и поэтессами"?
Это некая "система плагинов"?
Должна ли происходить пересборка exe в случае пересборки dll?
Ну и т.д.
Просто лично мне кажется, что имеет место быть недопонимание, для чего нужна dll.
-
> [7] P@K (07.11.11 15:08)
> .е. формирование отчетов вынести из основной программы.
В FastReport это можно делаеть без всяких DLL и перекомпиляции.
-
Сразу припоминается случай. Когда-то ооочень давно, в 2000-м году начинали разрабатывать систему охраны. В качестве БД был выбран MSSQL. А вот дальше, шеф по каком-то высшим материям и голосам в голове решил, что можно базу разбить на 3 фала: transaction log и 2 файла с данными. При этом мотивация была такая: в одном файле будут лежать всякие разные BLOB-ы, в другом - остальные данные. Оба файла физически находились на одном диске.
Ну а потом, как водится, нет ничего более постоянного, чем временное. Так эта фигня и существовала в виде двух файлов очень долгое время.
Собственно, с dll точно такой же вопрос: действительно ли она нужна в рамка текущей задачи?
-
> Должна ли происходить пересборка exe в случае пересборки dll?
сколько раз сталкивался с "декларацией" - "можно будет заменять только dll без exe", и ни разу это нормально не работало (может это конечно у нас бардак, но я не с единственной фирмой сталкивался (собственно у нас клиенты - фирмы))...
т.е. кто-то что-то путает, где-то меняются параметры/формы/"сквозная" логика(то что и там и там), и в итоге клиент сначала качает "только нужное" после попарившись и "задолбав" ЦТО качает "все в куче", и только тогда оно начинает работать.
а учитывая то что dll с формой почти = размеру программы... (т.е. всего пара dll с отчетами перекрывает по размеру пару десятков отчетов непосредственно в программе) то...
а вот действительно нафига?
-
Ну идея что бы отчеты, используемые в программе, формировать именно через dll.
Нормальная идея.
Только зачем длл при этом иметь дело с dbf?
Она должна иметь дело с абстрактными структурированными данными, полученнымивсеравнооткудаеёнекасается
-
> "можно будет заменять только dll без exe", и ни разу это
> нормально не работало
Вот именно.
-
> Она должна иметь дело с абстрактными структурированными
> данными, полученнымивсеравнооткудаеёнекасается
плюс стопицот.
-
> Нормальная идея.
> Только зачем длл при этом иметь дело с dbf?
А кроме того смущает и BDE
:(
-
> Это я понял. С какой целью это делается?
Именно с этой целью и делается
-
> сколько раз сталкивался с "декларацией" - "можно будет заменять
> только dll без exe", и ни разу это нормально не работало
> (может это конечно у нас бардак
Это у вас бардак