Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: ant0ni02004
Дата сообщения: 13.02.2012 16:24
neznayka3

OutputDebugString+DebugView
Автор: Brahman78
Дата сообщения: 14.02.2012 13:23
У есть кто-то кто пользовался Аудитом встроенным в Делфи?
Судя по всему он работает как-то очень странно.
Например его смущает запись:


Код:
var
CurrentClassName,
ClassName,
AppTitle: array [0..255] of Char;
Автор: A_V
Дата сообщения: 14.02.2012 13:50
Brahman78
ну да, кривой он - c анонимными методами например тоже не дружит
Автор: Frodo_Torbins
Дата сообщения: 14.02.2012 15:08
Brahman78
У вас слишком низкоуровневый код. К примеру в этой процедуре должны бы использоваться псевдофункции Low и High, а переменную i компилятор расширит до нативных для процессора 4 байт. К тому же в случае с динамическими массивами индекс обязан быть со знаком. Сейчас то все равно, но вдруг вы через пол-года измените тип этого массива?
Автор: Man_Without_Face
Дата сообщения: 15.02.2012 08:28

Цитата:
Почитать можно в DRKB. К примеру про Mutex - он очень похож на критическую секцию, но к нему возможен доступ из разных процессов.

Есть ли другие варианты?
К примеру писать одновременно с нескольких обращений клиентов (потоков). Получиться конечно каша, но у каждого потока будет свой идентификатор. Средствами Delphi может можно такое сделать?
Автор: wasilissk
Дата сообщения: 15.02.2012 11:31
Man_Without_Face
AssignFile + Append врядли.
TFileStream.Create(FileName, fmShareDenyNone) по идее должно помочь или в чем проблема-то?
Автор: Frodo_Torbins
Дата сообщения: 15.02.2012 11:54
Man_Without_Face
Если вас устраивает каша (когда одна половина слова из одного процесса, а другая из другого), то объекты синхронизации можно вообще не применять.
Автор: Man_Without_Face
Дата сообщения: 15.02.2012 15:26

Цитата:
TFileStream.Create(FileName, fmShareDenyNone) по идее должно помочь или в чем проблема-то?

Если так:
[more]
procedure WriteLog(const Msg: string);
{Добавление строки к файлу doNextLine - перевод строки} // true - перевод каретки
const // false - нет перевода каретки
CR=#13#10;
doNextLine: boolean = true;
var
f:TFileStream;
begin
if FileExists(ExtractFilePath(paramstr(0)) + 'Logs\Server.log')
then f:=TFileStream.Create(ExtractFilePath(paramstr(0)) + 'Logs\Server.log',fmOpenWrite+fmShareDenyNone)
else f:=TFileStream.Create(ExtractFilePath(paramstr(0)) + 'Logs\Server.log',fmCreate);
f.Position:=f.Size;
if doNextLine and (f.Size> 0)
then f.Write(CR,2);
f.Write(pointer(Msg)^,length(Msg));
f.Destroy;
end;
[/more]
то получается бред [more] -------------------------------------
CallFunctio
ContractNu
TWebModu൬䄀䐀伀䌀漀渀渀攀挀ഀ焀䌀愀爀搀猀䤀渀ഀ䄀搀搀 瀀愀爀愀洀 焀䌀愀ഀ焀䌀愀爀搀猀䤀渀
ContractNumberArray cr
Set param,
Set param,
Set param,
Set param,
Set param,
Set param,
Set param,
Set param,
Resu൬䘀甀渀挀琀椀
-------------------------------------
CallFunctio
ContractNu
TWebModu൬䄀䐀伀䌀漀渀渀攀挀ഀ焀䌀愀爀搀猀䤀渀ഀ䄀搀搀 瀀愀爀愀洀 焀䌀愀ഀ焀䌀愀爀搀猀䤀渀
ContractNumberArray cr
Set param,
Set param,
Set param,
Set param,
Set param,
Set param,
Set param,
Set param,
Resu൬䘀甀渀挀琀椀
-------------------------------------[/more]


Цитата:
Если вас устраивает каша

Ну я понимаю это так: строки в файле будут идти не по порядку выполнения запроса, а чередоваться с другими запросами.
Автор: Frodo_Torbins
Дата сообщения: 15.02.2012 16:17
Man_Without_Face
У вас ведь юникодная делфя, поэтому вам нужно либо правильно вычислять длину строки, либо изменить тип переменной Msg, либо использовать TStringStream.

Цитата:
Ну я понимаю это так: строки в файле будут идти не по порядку выполнения запроса, а чередоваться с другими запросами.
В большинстве случаев да, но в случае серьезной нагрузки, в файле иногда будет возникать каша.
Вообще под ведение логов лучше выделить отдельный процесс, или может с этим справится тот, который постоянно дергает ваш веб сервис?
Автор: wasilissk
Дата сообщения: 15.02.2012 16:22
Man_Without_Face
Собственно код который я привел, призван избавить от ошибки при повторном открытии уже открытого файла. Которая неизбежно возникнет в случае использования AssignFile. Ничего более.
Чтобы избавиться от каши, как уже несколько раз написали, необходимо использовать синхронизацию.
Процесс записи порции информации должен быть атомарен - стартуете критическую секцию записываете то, что нужно, критическую секцию освобождаете.
Автор: Man_Without_Face
Дата сообщения: 16.02.2012 10:44
Frodo_Torbins
wasilissk
Спасибо, сделал ansistring, вроде все нормально.

Есть еще вопрос: моя функция возвращает массив из классов.
Как организовать систему кодов ошибок. Т.е. если все отработало возвращаю заполненный массив, если нет код ошибки.

TContractNumber = class(TRemotable)

TContractNumberArray = array of TContractNumber;


Автор: wasilissk
Дата сообщения: 16.02.2012 12:07
Man_Without_Face
1. Возвращать в функции либо код ошибки, либо булево значение успеха. Массив передавать по ссылке и заполнять в функции. В клиентском коде анализировать возвращаемое значение функции, если успех, то работаетм с массивом.
2. Также возвращать массив как и есть сейчас. Но внутри функции устанвливать SetLastError(ваш код ошибки). В клиентском коде анализировать GetLastError.
Автор: Frodo_Torbins
Дата сообщения: 16.02.2012 22:15
Man_Without_Face
По поводу записи логов: думаю к идее синхронизации вам со временем придется вернутся, так что оставьте в коде комментарий с упоминанием mutex-а.
По поводу ошибок: еще возможен вариант с возбуждением исключения: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1392
Автор: Man_Without_Face
Дата сообщения: 17.02.2012 07:20
Frodo_Torbins
Соап сервер загружает экземпляр на каждый запрос, выполняется и завершается (если в это время будут стоять в очереди, в крит. секции записи в лог, они уничтожаться). Критич. секции (синхронизация потоков) или mutex (синхронизация приложений) мне не подойдут. Вроде так.


Добавлено:
еще иногда возникает ошибка
received content of invflid Content-type: text/html - Soap expects "text/xml"
Автор: Frodo_Torbins
Дата сообщения: 17.02.2012 10:33
Man_Without_Face
Потому я и предлагал еще один вариант: когда ведением логов занимается отдельный процесс, который запущен постоянно, и которому можно отправлять данные например с помощью WM_COPYDATA.

Цитата:
еще иногда возникает ошибка ...

Может хакерье балуется?
Автор: Man_Without_Face
Дата сообщения: 17.02.2012 11:06

Цитата:
Потому я и предлагал еще один вариант:

Не знаю, не красиво получается . Пока оставлю как сделал, дальше видно будет.


Цитата:
Может хакерье балуется?

На локалхосте пока тестирую. Погуглив нашел такие же проблемы, но решения не нашел.


Автор: LadyOfWood
Дата сообщения: 26.02.2012 01:23

Цитата:
К примеру писать одновременно с нескольких обращений клиентов (потоков). Получиться конечно каша, но у каждого потока будет свой идентификатор. Средствами Delphi может можно такое сделать?

Хэндл для каждого процесса будет разный, но mutex будет один, причем мьютекс прекрасно передается по имени и CreateMutex/OpenMutex вам дадут пригодный для испольщования хэндл. Дальше хватаем WaitForSingleObject, потом отпускаем на волю ReleaseMutex.
Автор: Snatch_tm
Дата сообщения: 28.02.2012 09:57
Интересует прикрутить Afalina XL Report к Delphi XE2. Читал что нужны исходники. Есть у кого оные? Ссылки какие нашел все битые или нет раздач.
Автор: druff
Дата сообщения: 28.02.2012 10:11
Snatch_tm
Тема не та. Вам в Варезник надо.
Автор: Snatch_tm
Дата сообщения: 28.02.2012 10:26
druff
В этой теме выше предлагали этот компонент. вот и думаю остался у кого или нет.
Автор: ant0ni02004
Дата сообщения: 28.02.2012 16:58
Snatch_tm

компонент то остался, он много где бегал
а вот прикручивать его к XE2 даже авторы забили
Автор: ASGASG1
Дата сообщения: 29.02.2012 09:07
Вылетает ошибка при использовании функции EncodeDate сегодня 29 февраля
Автор: Snatch_tm
Дата сообщения: 29.02.2012 09:31
ant0ni02004
Забили они еще лет 9 назад. Однако народ его не бросил, потому что он хоросий, и компилировали и под D2009. Есть что либо аналогичное под XE2?
Автор: Medium
Дата сообщения: 29.02.2012 13:07

Цитата:
Забили они еще лет 9 назад. Однако народ его не бросил, потому что он хоросий, и компилировали и под D2009. Есть что либо аналогичное под XE2?

Компонент действительно неплохой. До сих пор используется. Работает со всеми версиями MS Excel. Делал для себя аккуратную адаптацию под Delphi XE. На XE2 пока не переходил, поэтому работоспособность не проверял.
Но мне кажется, изменений там потребуется минимально. Среды не сильно отличаются.
Автор: Snatch_tm
Дата сообщения: 29.02.2012 14:54
Medium
Выручи а. Выложи эту сборку.
Автор: salexn1
Дата сообщения: 29.02.2012 15:33
Snatch_tm

хttp://forum.ru-board.com/postings.cgi?action=edit&forum=35&topic=0795&postno=50

Добавлено:
Snatch_tm
Это правда для D7
Автор: Snatch_tm
Дата сообщения: 29.02.2012 15:49
salexn1
Этот файл у меня есть. Там нет исходников для перекомпиляции компонента в другой версии Delphi.
Автор: Medium
Дата сообщения: 01.03.2012 11:10
Snatch_tm
Сбрось в ПМ адрес, вышлю.
Автор: Snatch_tm
Дата сообщения: 01.03.2012 11:39
Medium
Я меня не получается писать в личку на этом форуме. Глюк или что не знаю. Пишу адрес сюда.
Сбрось если есть возможность XLReport для Delphi XE timilan_free@mail.ru
Автор: Medium
Дата сообщения: 01.03.2012 14:08
Snatch_tm
Ушло. Добавил поддержку XE2.
Желаю успехов.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.