Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
кто нибудь делал фильтрацию с помощью fibplus? как изменили размер буффера вы вызове функции переданной в RegisterBlobFilter написал код в с++ builder изменение размерана realloc Код: plaintext 1. 2. 3. 4. 5. 6. 7. что интересно в src не те данные передаются на входе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 09:48 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish, с этим в раздел C/C++. Модератор: Тема перенесена из форума "Firebird, InterBase". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 10:01 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. Так а как ты вызываешь эту замечательную функцию PackBuffer(char *src,int &src_len) ? AccessViolation ReadError как бы намекает, что параметр src в этот момент указывает на недоступную память, т.е. попусту содержит какой-то мусор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 12:31 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
MasterZiv, с этим я разобрался неправильно были объявлены входные переменные AnsiString *src сейчас данные которые подаются на вход правильные и они видны в src у меня падает в другом месте на memcpy, причем падает не всегда, с маленькими данными все работает корректно, а когда надо скопировать размер памяти 10 мегабайт тогда выдает ошибку Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 12:56 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish// падает здесь AccessViolation ReadError Потому что ты память выделил только на строку. А терминирующий нуль куда по-твоему должен писаться?.. Да и, собственно, где тебя так научили выделять память для AnsiString?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:01 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, а как еще её выделять если данные в AnsiString хранятся? зачем ноль в конце добавлять если в AnsiString данные бинарного вида? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:04 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfishа как еще её выделять если данные в AnsiString хранятся? Специально для этого предназначенной функцией SetLength. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:14 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, все получилось src->SetLength дальше заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:15 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
GarfishDimitry Sibiryakov, а как еще её выделять если данные в AnsiString хранятся? зачем ноль в конце добавлять если в AnsiString данные бинарного вида? Ну, может быть, НЕ хранить тогда данные в AnsiString ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:38 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish, Ты уверен, что это именно то, что тебе надо ? Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:39 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish, не всегда срабатывает SetLength void __fastcall PackBuffer(AnsiString *src,int &src_len) { unsigned long cmp_len = src_len*1.11+12; char *cmp = (char*)malloc(src_len); compress2(cmp, &cmp_len, src->c_str(), src_len, 9); src->SetLength(cmp_len+4); memcpy(src->c_str(), &src_len, 4); memcpy(src->c_str()+4, cmp, cmp_len); src_len=cmp_len+4; free(cmp); } иногда срабатывает, а иногда нет ,после выхода из процедуры выдает Invalid pointer operation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:43 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
MasterZiv, да надо сохранить первоначальный размер строки до компрессии, при распаковке это число как то учитывается, и его надо где то взять, я его сохраняю в начале строки 4 байта int, потом считываю при распаковке, и подаю в декомпрессов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:46 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish, SetLength похоже не работает в сторону уменьшения строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 13:59 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish, зачем ты AnsiString используешь? Он же для таких вещей не предназначен. Почему не char * или vector<char>? В хелпе написано: "The c_str method is intended primarily for reading the value of the AnsiString. To modify the string’s value, use the [] operator or AnsiString methods such as Insert and Delete.". Код: plaintext 1. 2. Уверен, что это корректно обрабатывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 14:25 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
m_Sla, компонент так написан http://www.devrace.com/ru/fibplus/articles/2261.php только у меня на с++ builder пасклевский вариант procedure UnpackBuffer(var Buffer: PChar; var BufSize: LongInt); переменную var Buffer: PChar; я перписал на СИ в виде char *src такая конструкция не работает оказалось что на си это тип AnsiString ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 18:12 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
GarfishMasterZiv, да надо сохранить первоначальный размер строки до компрессии, при распаковке это число как то учитывается, и его надо где то взять, я его сохраняю в начале строки 4 байта int, потом считываю при распаковке, и подаю в декомпрессов Это немного смахивает на идиотизм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 18:17 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfishоказалось что на си это тип AnsiString Авотхрен. "var x:PChar" переводится на С++ как "char* &x" и никаких AnsiString. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 19:06 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, сжатие работает корректно , при упаковке уменьшается размер буффевра при выполнении realloc. void __fastcall PackBuffer(char* &src,int &src_len) { unsigned long cmp_len = src_len*1.11+12; char *cmp = (char*)malloc(src_len); compress2(cmp, &cmp_len, src, src_len, 9); realloc(src,cmp_len+4); memcpy(src, &src_len, 4); memcpy(src+4, cmp, cmp_len); src_len=cmp_len+4; free(cmp); } а вот при распаковке, не работает. думаю, что recalloc не может выделить память для большего размера, падает на memcpy void __fastcall UnpackBuffer(char* &src,int &src_len) { unsigned long unc_len; memcpy(&unc_len, src, 4); char *unc = (char*)malloc(unc_len); uncompress(unc, &unc_len, src+4, src_len-4); realloc(src,unc_len); src_len=unc_len; memcpy(src, unc, src_len);// тут вылетает free(unc); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 19:52 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfish, в исходниках нашел что ожидаются функции такого вида typedef void __fastcall (*TIBBlobFilterProc)(void *BlobBuffer, int &BlobSize); typedef TIBBlobFilterProc *PIBBlobFilterProc; void __fastcall RegisterBlobFilter(int BlobSubType, PIBBlobFilterProc EncodeProc, PIBBlobFilterProc DecodeProc); у меня это сделано так DM->FDB->RegisterBlobFilter(-1,(PIBBlobFilterProc)PackBuffer,(PIBBlobFilterProc)UnpackBuffer); где void __fastcall UnpackBuffer(char* &src,int &src_len) void __fastcall PackBuffer(char* &src,int &src_len) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 20:59 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Блин, товарисч Garfish, ужо опубликовал весь свой кодильник-то, что гадать так и будем ? Кто ж знает, где там у тебя что ещё навараксано... Кроме того, это НЕ МОЖЕТ работать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. прочитай хотя бы документацию по realloc http://www.cplusplus.com/reference/cstdlib/realloc/?kw=realloc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 21:04 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ты маг и кудесник, что же раньше не сказал, что надо присвоить адрес src=(char*)realloc... все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 21:11 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Garfishtypedef void __fastcall (*TIBBlobFilterProc)(void *BlobBuffer, int &BlobSize); у меня это сделано так void __fastcall UnpackBuffer(char* &src,int &src_len) Ну а назачем ты так сделал? Чтобы слоники падали?.. Тебе не приходило в голову, что подсовывать функцию с совсем другой сигнатурой чревато боком?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 21:13 |
|
||
|
Фильтрация BLOB-полей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, если бы я знал утром, что в этом месте упаду я бы здесь соломы подстелил ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 21:15 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38194837&tid=2020354]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 283ms |
| total: | 443ms |

| 0 / 0 |
