05.06.2007, 12:06 | #1 |
Участник
|
контейнер: += трагедия вставки пустой строки.
предлагаю вашему вниманию очередную бочину в энджине аксапты (ax3sp2):
демонстрирует его следующий джобик: кодирует строку в штрих код с попутной вставкой пустой строки в контейнер. X++: #define.bug(0) #define.showstep(1) #define.str2code("123") static void Job144(Args _args) { container ret1; str cret; int clen; int i; // кодирует barcode str encode(str _string) { DLLFunction _BC_Code128; DLL _barcodeDLL; str barcodeStr; ; try { _barcodeDLL = new DLL('Bcfont32'); } catch(Exception::Internal) { info("barcodeDLL error!!!"); return ''; } _BC_Code128 = new DLLFunction(_barcodeDLL,'BC_Code128'); _BC_Code128.returns(ExtTypes::STRING); _BC_Code128.arg(ExtTypes::STRING); barcodeStr = _BC_Code128.call(_string); _barcodeDLL = null; _BC_Code128 = null; return barcodeStr; } ; try { cret = encode(#str2code); info("до вставки в контейнер : '"+cret+"'"); for(i=1;i<10;i++) { #if.bug(1) ret1 += ""; #endif #if.bug(0) ret1 = conins(ret1,conlen(ret1)+1,""); #endif #if.showstep(1) cret = encode(#str2code); info(strfmt("вставка %1, строка: '%2', баркод: '%3'",i,#str2code,cret)); #endif } cret = encode(#str2code); } catch { info("catch !!!"); } info("после вставки в контейнер : '"+cret+"'"); } для начала ставим #define.bug(0) -> происходит 10 вставок в контейнер с помощью conins + 10 удачных кодирований. теперь ставим #define.bug(1) -> происходит 10 вставок в контейнер оператором += и 10 кодирований из которых 3 правильно, остальные нет. для чистоты эксперимента можно исключить вызов кодирования в каждой итерации #define.showstep(0). (совсем забыл, после того как контейнер "уложит" вызов ф-ции кодирования, функция уже нормально не отработает - перезапуск клиента). Т.е. нарушение каких то внутренних структур на лицо. Вывод: не использовать для контейнера оператор +=<str> PPS: вывод оказался не верным, что не может не радовать - базовые операторы таки работают нормально.
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 06.06.2007 в 16:24. Причина: более понятно написал |
|
Теги |
bstr, lpstr, баг, штрихкод |
|
|