![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL и QuickReport [D6, Paradox]
vis79 © (2002-10-03 09:43:00)Я написал приложение которое использует QuickReport, потом хотел запихать форму вызывающую Preview в DLL форма отображается нормально но на стадии Preview приложение зависает!
Кто нить может высказать свое мнение по данному поводу??
VAleksey (2002-10-04 15:04:00) [1]А потом в длл присвоить Application.Handle переданный тобой Handle.
ЗЫ
То есть не сам Application передать, а его Handle.
VAleksey (2002-10-04 15:03:00) [2]Формы в длл есть ? Если да то в длл нужно передавать объект Application для их (форм) правильной работы.
vis79 (2002-10-04 13:04:00) [3]>Ura
- Что значит скомпилировать с пакетами ???
Ura (2002-10-04 13:00:00) [4]1. Скомпилируй с пакетами dll .
2. Скомпилируй с пакетами приложение
У них должет быть 1 Aplication и 1 TSCREEN
VAleksey (2002-10-04 12:23:00) [5]дык все вроде туда :))
А длл как выглядит ?
vis79 (2002-10-04 10:06:00) [6]:)))
если бы мне помог ShareMem... Такого вопроса в форуме не было бы.
P.s. Сразу говорю ставил его первым и в приложение вызывающее ДЛЛ и в в самой ДЛЛ, вот так:
library Project1;
uses
ShareMem,
SysUtils,
Classes,
Forms,
UnitInterSystem in "UnitInterSystem.pas" {InterSystem},
Global in "Global.pas", и т.д.
в проге:
program Project1;
uses
ShareMem,
Forms,
Unit1 in "Unit1.pas" {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
(Может не туда ставлю ???)
VAleksey (2002-10-04 09:56:00) [7]Замучили парня :))
Uses ShareMem,
первым пунктом в проекте и в длл, но не забудь потом что для работы программы тебе понадобиться borlandmm.dll.
Kuusiniemi (2002-10-04 09:53:00) [8]Ну раз читал, то Sharemem вставлял ПЕРВЫМ в uses И проекта exe И проекта dll? Ты о главном из этого предупреждения так и не сказал ни разу. :)
vis79 (2002-10-04 05:55:00) [9]>Kuusiniemi
Да смотрел я, смотрел предупреждение борланда, ну не знаю почему парни с qsofta используют для метода BeforePrint string в качестве параметра, а не PChar например.. Мне нужно знать текст который берется из НД и вставляется в QRDBText связанной с конкретным полем в БД, поэтому я вызываю событие QRDBText4Print, а у него уже параметры QRDBText4Print(sender: TObject; var Value: String); ну немогу я исправить эту процедуру например на QRDBText4Print(sender: TObject; var Value: PChar); - компилятор ругается на несовместимость параметров... А мне нужно узнать этот текст... КАК?
>passm
Procedure ViewProtInSys; export; stdcall;
Begin
If not Assigned (ReportForm) Then
ReportForm := TReportForm.Create(Application);
ReportForm.ShowModal;
End;
ReportForm - это форма диалог, на ней кнопка по нажатию которой происходит:
If not Assigned (Form2) Then
Form2 := TForm2.Create(Application);
QuickRep1.PreviewModal;
Form2.Close;
А уже на стадии работы Preview вызывается метод:
QRDBText4Print(sender: TObject; var Value: String); - где Value - это текст соответствующий выводу в данный момент в QRDBText4, и он когда все это работает в DLL содержит неверное значение!!!!!
Kuusiniemi (2002-10-03 15:40:00) [10]Епрст!
Dll твоя? Твоя.
Функцию со стрингом в качестве параметра ты вызываешь? Ты.
Смотрел предупреждение Борланда о работе со строками-параметрами в dll? Похоже что нет.
passm (2002-10-03 14:33:00) [11]vis79 © (03.10.02 14:03)> Каков формат вызываемой функции из твоей DLL?
vis79 (2002-10-03 14:03:00) [12]ЭТО НЕ Я использую string, а qsoft в своих компонентах QReport!
QRDBText4Print(sender: TObject; var Value: String); - это описание метода, который повешен на событие, срабатывающее перед прорисовкой preview для компонента QRDBText4. А когда я это все запихал в ДЛЛ это значение типа СТРИНГ передается неверно, а мне нужно как-то отловить это значение values либо сделать так чтобы оно корректно передавалось.. КАК ЭТО СДЕЛАТЬ????
Kuusiniemi (2002-10-03 13:13:00) [13]String в dll?? А предупреждение в начале проекта dll от Борланда читали?
vis79 (2002-10-03 11:48:00) [14]>VAleksey
Короче косяк я выкупил, висла эта ДЛЛ по той причине, что неверно передавались строки в процедуры типа BeforePrint, там
объявление такое :
procedure TForm2.QRDBText4Print(sender: TObject; var Value: String);
здесь Value типа String а когда это работает в DLL это значение передается неверное, т.е. не то что надо... (случайный кусок памяти)
а я пытался работать с этим Value, поэтому приложение откуда я вызывал ДЛЛ зависало, но вот вопрос можно что либо сделать чтобы VALUE передавалось в эту процедуру ВЕРНО!!!
VAleksey (2002-10-03 11:06:00) [15]Да кто его знает почему ...
Хоть бы куски кода привел из программы, где у тебя длл вызывается, способ описания внешней функции, как она у тебя в длл оформлена. Тогда и посмотрим.
vis79 (2002-10-03 10:35:00) [16]>Johnmen,Kaban
Вообще-то я поросил высказать по этому поводу свое мнение, а не искать причину ЗАЧЕМ и т.д. Вот ХОЧУ я так вот и вся причина, ну захотел я сделать именно так, именно в DLL...
Kaban (2002-10-03 10:06:00) [17]Вы так и не ответили на главный вопрос: ЗАЧЕМ?
vis79 (2002-10-03 10:03:00) [18]>Johnmen
Там процедура используется которая выводит отчет, выводить форму которая формирует отчет вызовом одной процедуры...
Johnmen (2002-10-03 09:49:00) [19]Мнение-вопрос : а на хрена здесь DLL ?
(обоснование...?)