powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Что за дела с параметрами? Может кто знает?
4 сообщений из 4, страница 1 из 1
Что за дела с параметрами? Может кто знает?
    #32123478
Фотография aLexx Subb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что в исследованиях своих обнаружил.

Когда вызываю dll без входных параметров, то все работает, если есть вх. параметр, то
глюки.

Например

procedure PreviewReport(App:TApplication;p:TRepParam);export;
procedure PreviewReport2(App:TApplication);export

p:TRepParam - вызывает глюки

Две абсолютно одинаковые процедурки.

в первой я имя отчета, строку коннекта и UID документа переадю в параметре, а во втором
присваиваю сам в нутри процедуры.

Первый случай форма вызывается раз или два потом av, при закрытии приложения AV вываливается.
Во втором случае все хорошо. В чем проблема?
-----------------------------------------------------------------

Вот структура вх. параметра

type
PRepParam=^TRepParam;
TRepParam=record
Name:string; //Название отчета
UIDs:string; //Если это отчет, например накладная, то передается UID накладной
ConStr:string; // Строка подключения, которая передается в ADOQuery отчета.
end;

-----------------------------------------------------------------
Вот пример процы в dll

procedure PreviewReport;
begin
Application:=App;
FrmReports:=TFrmReports.Create(Application);
try
with FrmReports.frReport1 do
begin
FrmReports.SetStrVar('Источник_Данных',p.ConStr);
if p.UIDs<>'' then FrmReports.SetStrVar('UID',p.UIDs);
if LoadFromFile(p.Name) then
if PrepareReport then
ShowPreparedReport
else
ShowMessage('Ошибка подготовки отчета! '+p.Name)
else
ShowMessage('Ошибка загрузки отчета! '+p.Name)
end

finally
begin
FrmReports.Free;
FrmReports:=nil;
end;
end;
Application.ProcessMessages;
Application:=OldApp;
end;
-----------------------------------------------------------------
Ну а вот другой

procedure PreviewReport2;
begin
Application:=App;
FrmReports:=TFrmReports.Create(Application);
try
with FrmReports.frReport1 do
begin
if LoadFromFile('Прайс-лист.frf') then
if PrepareReport then
ShowPreparedReport
else
ShowMessage('Ошибка подготовки отчета! ')
else
ShowMessage('Ошибка загрузки отчета! ')
end

finally
begin
FrmReports.Free;
FrmReports:=nil;
end;
end;
Application.ProcessMessages;
Application:=OldApp;
end;
-----------------------------------------------------------------
Av вылезает на метке в CPU окне TObject.Free
ошибка такая raised too many consecutive execeptions Access vialation at ....

TObject.Free:
00743614 85C0 test eax,eax
00743616 7407 jz TObject.Free + $B
00743618 B201 mov dl,$01
0074361A 8B08 mov ecx,[eax] <-на этой строке
0074361C FF51FC call dword ptr [ecx-$04]
0074361F C3 ret
...
Рейтинг: 0 / 0
Что за дела с параметрами? Может кто знает?
    #32123623
Фотография Andrew Campball
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй написать так:

procedure PreviewReport(App:TApplication;p:TRepParam);stdcall;
procedure PreviewReport2(App:TApplication);stdcall;

а в самом модуле DLL описать экспортируемые процедуры
export
PreviewReport,
PreviewReport2;
...
Рейтинг: 0 / 0
Что за дела с параметрами? Может кто знает?
    #32123632
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитай сообщения про AV
1. Опиши стринги определенной длины
2. Выдели память перед передачей PRepParam
3. Передай поинтер на выделеную память
4. Освободи память после вызова.
...
Рейтинг: 0 / 0
Что за дела с параметрами? Может кто знает?
    #32123767
dasistgut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего всё гораздо проще: Uses ShareMem
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Что за дела с параметрами? Может кто знает?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]