Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Что за дела с параметрами? Может кто знает? / 4 сообщений из 4, страница 1 из 1
20.03.2003, 10:49
    #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
20.03.2003, 12:22
    #32123623
Andrew Campball
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что за дела с параметрами? Может кто знает?
Попробуй написать так:

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

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


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