Форум: "Базы";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
ВнизDLL и QuickReport Найти похожие ветки
← →
vis79 (2002-10-03 09:43) [0]Я написал приложение которое использует QuickReport, потом хотел запихать форму вызывающую Preview в DLL форма отображается нормально но на стадии Preview приложение зависает!
Кто нить может высказать свое мнение по данному поводу??
← →
Johnmen (2002-10-03 09:49) [1]Мнение-вопрос : а на хрена здесь DLL ?
(обоснование...?)
← →
vis79 (2002-10-03 10:03) [2]>Johnmen
Там процедура используется которая выводит отчет, выводить форму которая формирует отчет вызовом одной процедуры...
← →
Kaban (2002-10-03 10:06) [3]Вы так и не ответили на главный вопрос: ЗАЧЕМ?
← →
vis79 (2002-10-03 10:35) [4]>Johnmen,Kaban
Вообще-то я поросил высказать по этому поводу свое мнение, а не искать причину ЗАЧЕМ и т.д. Вот ХОЧУ я так вот и вся причина, ну захотел я сделать именно так, именно в DLL...
← →
VAleksey (2002-10-03 11:06) [5]Да кто его знает почему ...
Хоть бы куски кода привел из программы, где у тебя длл вызывается, способ описания внешней функции, как она у тебя в длл оформлена. Тогда и посмотрим.
← →
vis79 (2002-10-03 11:48) [6]>VAleksey
Короче косяк я выкупил, висла эта ДЛЛ по той причине, что неверно передавались строки в процедуры типа BeforePrint, там
объявление такое :
procedure TForm2.QRDBText4Print(sender: TObject; var Value: String);
здесь Value типа String а когда это работает в DLL это значение передается неверное, т.е. не то что надо... (случайный кусок памяти)
а я пытался работать с этим Value, поэтому приложение откуда я вызывал ДЛЛ зависало, но вот вопрос можно что либо сделать чтобы VALUE передавалось в эту процедуру ВЕРНО!!!
← →
Kuusiniemi (2002-10-03 13:13) [7]String в dll?? А предупреждение в начале проекта dll от Борланда читали?
← →
vis79 (2002-10-03 14:03) [8]ЭТО НЕ Я использую string, а qsoft в своих компонентах QReport!
QRDBText4Print(sender: TObject; var Value: String); - это описание метода, который повешен на событие, срабатывающее перед прорисовкой preview для компонента QRDBText4. А когда я это все запихал в ДЛЛ это значение типа СТРИНГ передается неверно, а мне нужно как-то отловить это значение values либо сделать так чтобы оно корректно передавалось.. КАК ЭТО СДЕЛАТЬ????
← →
passm (2002-10-03 14:33) [9]vis79 © (03.10.02 14:03)> Каков формат вызываемой функции из твоей DLL?
← →
Kuusiniemi (2002-10-03 15:40) [10]Епрст!
Dll твоя? Твоя.
Функцию со стрингом в качестве параметра ты вызываешь? Ты.
Смотрел предупреждение Борланда о работе со строками-параметрами в dll? Похоже что нет.
← →
vis79 (2002-10-04 05:55) [11]>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-04 09:53) [12]Ну раз читал, то Sharemem вставлял ПЕРВЫМ в uses И проекта exe И проекта dll? Ты о главном из этого предупреждения так и не сказал ни разу. :)
← →
VAleksey (2002-10-04 09:56) [13]Замучили парня :))
Uses ShareMem,
первым пунктом в проекте и в длл, но не забудь потом что для работы программы тебе понадобиться borlandmm.dll.
← →
vis79 (2002-10-04 10:06) [14]:)))
если бы мне помог 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 12:23) [15]дык все вроде туда :))
А длл как выглядит ?
← →
Ura (2002-10-04 13:00) [16]1. Скомпилируй с пакетами dll .
2. Скомпилируй с пакетами приложение
У них должет быть 1 Aplication и 1 TSCREEN
← →
vis79 (2002-10-04 13:04) [17]>Ura
- Что значит скомпилировать с пакетами ???
← →
VAleksey (2002-10-04 15:03) [18]Формы в длл есть ? Если да то в длл нужно передавать объект Application для их (форм) правильной работы.
← →
VAleksey (2002-10-04 15:04) [19]А потом в длл присвоить Application.Handle переданный тобой Handle.
ЗЫ
То есть не сам Application передать, а его Handle.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c