Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Что за дела с параметрами? Может кто знает?
|
|||
|---|---|---|---|
|
#18+
Вот что в исследованиях своих обнаружил. Когда вызываю 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 10:49 |
|
||
|
Что за дела с параметрами? Может кто знает?
|
|||
|---|---|---|---|
|
#18+
Попробуй написать так: procedure PreviewReport(App:TApplication;p:TRepParam);stdcall; procedure PreviewReport2(App:TApplication);stdcall; а в самом модуле DLL описать экспортируемые процедуры export PreviewReport, PreviewReport2; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:22 |
|
||
|
Что за дела с параметрами? Может кто знает?
|
|||
|---|---|---|---|
|
#18+
Прочитай сообщения про AV 1. Опиши стринги определенной длины 2. Выдели память перед передачей PRepParam 3. Передай поинтер на выделеную память 4. Освободи память после вызова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:31 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32123632&tid=2118855]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 334ms |

| 0 / 0 |
