Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - ilovb

Страницы: 1 ... 4 5 [6] 7 8
76
Никак не соображу. Вот есть у меня:
PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR;
...
name: WinApi.PtrWSTR;
Как под него правильно выделить память?
Через WinApi?

Я пробовал просто пустую строку присваивать:
name := '';Но потом у BB башню сносит, т.к. я этот name передаю в винапишную функцию, которая пишет строку по этому адресу... и видимо портит память.

Сделал так:
name := '                                                                                                                     ';Проблема исчезла, но не пойму что делает BB в этом случае.

Вот на всякий случай тестовый код:
MODULE SmartTest;
    IMPORT  Log := StdLog,  WinApi, SYSTEM;
   
    PROCEDURE Test1*;
        VAR
            res: WinApi.HWND;
            format: INTEGER;
            name: WinApi.PtrWSTR;
            cchMaxCount: INTEGER;
            i, j: INTEGER;
    BEGIN Log.Clear;
       
        cchMaxCount := 20;
       
        res := WinApi.GetClipboardOwner();
        Log.Int(res); Log.Ln;
       
        IF WinApi.OpenClipboard(0) # 0 THEN
           
            name := '                                                                                                                     ';
           
            Log.String("open"); Log.Ln;
           
            format := 0;
            REPEAT
               
                format := WinApi.EnumClipboardFormats(format);
                Log.Int(format);
               
                CASE format OF
                    | WinApi.CF_TEXT:
                        Log.String(" -- CF_TEXT");
                    | WinApi.CF_BITMAP:
                        Log.String(" -- CF_BITMAP");
                    | WinApi.CF_METAFILEPICT:
                        Log.String(" -- CF_METAFILEPICT");
                    | WinApi.CF_SYLK:
                        Log.String(" -- CF_SYLK");
                    | WinApi.CF_DIF:
                        Log.String(" -- CF_DIF");
                    | WinApi.CF_TIFF:
                        Log.String(" -- CF_TIFF");
                    | WinApi.CF_OEMTEXT:
                        Log.String(" -- CF_OEMTEXT");
                    | WinApi.CF_DIB:
                        Log.String(" -- CF_DIB");
                    | WinApi.CF_PALETTE:
                        Log.String(" -- CF_PALETTE");
                    | WinApi.CF_PENDATA:
                        Log.String(" -- CF_PENDATA");
                    | WinApi.CF_RIFF:
                        Log.String(" -- CF_RIFF");
                    | WinApi.CF_WAVE:
                        Log.String(" -- CF_WAVE");
                    | WinApi.CF_UNICODETEXT:
                        Log.String(" -- CF_UNICODETEXT");
                    | WinApi.CF_ENHMETAFILE:
                        Log.String(" -- CF_ENHMETAFILE");
                    | WinApi.CF_HDROP:
                        Log.String(" -- CF_HDROP");
                    | WinApi.CF_LOCALE:
                        Log.String(" -- CF_LOCALE");
                    | WinApi.CF_MAX:
                        Log.String(" -- CF_MAX");
                    | WinApi.CF_OWNERDISPLAY:
                        Log.String(" -- CF_OWNERDISPLAY");
                    | WinApi.CF_DSPTEXT:
                        Log.String(" -- CF_DSPTEXT");
                    | WinApi.CF_DSPBITMAP:
                        Log.String(" -- CF_DSPBITMAP");
                    | WinApi.CF_DSPMETAFILEPICT:
                        Log.String(" -- CF_DSPMETAFILEPICT");
                    | WinApi.CF_DSPENHMETAFILE:
                        Log.String(" -- CF_DSPENHMETAFILE");
                    | WinApi.CF_PRIVATEFIRST:
                        Log.String(" -- CF_PRIVATEFIRST");
                    | WinApi.CF_PRIVATELAST:
                        Log.String(" -- CF_PRIVATELAST");
                    | WinApi.CF_GDIOBJFIRST:
                        Log.String(" -- CF_GDIOBJFIRST");
                    | WinApi.CF_GDIOBJLAST:
                        Log.String(" -- CF_GDIOBJLAS");
                ELSE   
                   
                    i := WinApi.GetClipboardFormatNameW(format, name, cchMaxCount);
                   
                    Log.String(" -- ");
                    IF i = 0 THEN
                        Log.String("UNKNOWN");
                    END;
                    j := 0;
                    WHILE i > 0 DO                       
                        Log.Char(name[j]);                   
                        INC(j);
                        DEC(i, 1);
                    END;               
                       
                END;
           
            Log.Ln;
           
            UNTIL format = WinApi.ERROR_SUCCESS;
       
        END;
       
        IF WinApi.CloseClipboard() # 0 THEN
            Log.String("close"); Log.Ln;
        END;
       
    END Test1;
   
BEGIN
END SmartTest.Test1

77
Общий раздел / Задачка SQL'ная (разминка мозга)
« : Октябрь 26, 2012, 11:02:01 am »
Попалась коллеге сегодня такая задачка:
Есть список дат (без ограничений) Например:

02.10.2012
05.10.2012
01.10.2012
03.10.2012
06.10.2012
19.10.2012
20.10.2012
15.10.2012
16.10.2012
17.10.2012
05.11.2012
18.10.2012

Нужно получить результат в виде таблицы с двумя колонками: [Начало, Конец]
Эта таблица должна содержать непрерывные периоды из исходного списка.
Т.е. для данного выше списка будет:

02.10.2012 (1)
05.10.2012 (2)
01.10.2012 (1)
03.10.2012 (1)
06.10.2012 (2)
19.10.2012 (3)
20.10.2012 (3)
15.10.2012 (3)
16.10.2012 (3)
17.10.2012 (3)
05.11.2012 (4)
18.10.2012 (3)

1) 01.10.2012 - 03.10.2012
2) 05.10.2012 - 06.10.2012
3) 15.10.2012 - 20.10.2012
4) 05.11.2012 - 05.11.2012

Периоды не должны пересекать границы месяца. Т.е. если у вас такой список:
30.10.2012
31.10.2012
01.11.2012
02.11.2012
то результат будет содержать два периода, а не один:
1) 30.10.2012 - 31.10.2012
2) 01.11.2012 - 02.11.2012

Интерес представляет решение на SQL (это ограничение реальной задачи)

78
Общий раздел / Sublime Text 2
« : Октябрь 15, 2012, 07:10:28 pm »
Офигенный редактор. Прям воплощение моих мечт. Все клавишные сочетания на месте. Ведет себя ожидаемо. Интерфейс очень приятный. Просто шедевр по сравнению с редактором BB (сколько бы там супер-пупер идей не было)

http://habrahabr.ru/post/147856/
http://www.sublimetext.com/2

ps Че ж я раньше его не видел...

79
Общий раздел / Умный калькулятор
« : Октябрь 09, 2012, 04:02:39 am »
Всегда удивлялся виндозному калькулятору.

вычислим:
10 / 3 = 3,333333333333333

Что будет если умножить на 3 результат?
Каждый кодер знает что 9,999999999999999

Но этот засранец запоминает рациональные числа и выдает 10

К тому же он помнит не только последнее рациональное число, а на всю глубину вычислений.
Т.е. к числу 10 всегда можно вернуться выполняя обратные действия.

80
Общий раздел / Oberon SWAG
« : Октябрь 04, 2012, 07:33:45 am »
Была раньше такая замечательная коллекция:
http://pascal.sources.ru/rswag.htm

С удовольствием копался в ней лет 10 назад

Оберонщики вполне могли бы продолжить традицию.

Есть конечно коллекция Helmut Zinn. Но это уже несколько другое...

81
Общий раздел / Я попался на синтаксисе "=" vs ":="
« : Сентябрь 24, 2012, 12:31:11 pm »
Вот прям сейчас напоролся на свою ошибку. Не то чтобы критично, но минуты 3 искал в другом месте.  :)

Цитировать
...
Начисление = Начисления.Добавить();
Начисление.ОбъектСети =
Начисление.Номенклатура = ТекВидУслуги.Номенклатура;
Начисление.Объем = Остаток;
...

В результатах объект сети не был заполнен, но по логике алгоритма такого быть не должно.

Естественно синтаксический контроль сие скушал. А так как типизация динамическая, то и в рантайме ошибки нет...  :)

82
Общий раздел / Вышел ремейк Half-Life
« : Сентябрь 20, 2012, 09:56:26 am »
http://tech.onliner.by/2012/09/14/black-mesa-2

ps Эх... появится время обязательно пройду... заново...  :)

83
Общий раздел / Перлы форумчан just for fun ;)
« : Сентябрь 03, 2012, 08:32:55 am »
Цитата: Kemet
И это понятно, потому что реальная экономика связана с производством, а фуфел - это мыльный пузырь

84
В 1С есть стандартный сериализатор, который преобразует любой объект в поток символов след. формата:

Весь поток - это список элементов через запятую в фигурных скобках.
например:
{1, 2.2, "Один"}

Элементы могут быть трех типов:
1. Число - как первые два элемента в примере
2. Строка - в кавычках как третий элемент в примере (строка может содержать апострофы и удвоенные кавычки "")
3. UID (например 51e7a0d2-530b-11d4-b98a-008048da3034)

Списки могут быть вложенными.
Например:

{1, 2, {1, 2}, "ООО ""Восход"""}

Примеры сериализации:

Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(4);

сериализуется в:
{"#",51e7a0d2-530b-11d4-b98a-008048da3034,
{4,
{"N",1},
{"N",2},
{"N",3},
{"N",4}
}
}

Структура = Новый Структура("Один, Два, Три, Четыре", 1, 2, 3, 4)

сериализуется в:
{"#",4238019d-7e49-4fc9-91db-b6b951d5cf8e,
{4,
{
{"S","Один"},
{"N",1}
},
{
{"S","Два"},
{"N",2}
},
{
{"S","Три"},
{"N",3}
},
{
{"S","Четыре"},
{"N",4}
}
}
}

Байткод из компилированной обработки с предыдущими примерами:
{1,
{"Cmd",40,0,
{1,1},
{2,0},
{18,0},
{51,0},
{16,0},
{1,3},
{2,0},
{4,2},
{18,1},
{20,1},
{1,3},
{1,4},
{2,0},
{4,3},
{18,1},
{20,1},
{1,4},
{1,5},
{2,0},
{4,4},
{18,1},
{20,1},
{1,5},
{1,6},
{2,0},
{4,5},
{18,1},
{20,1},
{1,6},
{1,8},
{2,1},
{4,6},
{4,2},
{4,3},
{4,4},
{4,5},
{18,5},
{51,7},
{16,0},
{22,0}
},
{"Const",8,
{"S","Массив"},
{"S","Добавить"},
{"N",1},
{"N",2},
{"N",3},
{"N",4},
{"S","Один, Два, Три, Четыре"},
{"S","Структура"}
},
{"Var",2,
{"Массив",0,-1},
{"Структура",0,-1}
}
}

Нужно написать парсер, который поднимет это в дерево. Каждый узел дерева должен знать своего родителя и список детей.

Ради эффективности желательно делать без рекурсии (так интереснее  :))
Хотелось бы дейкстру тут увидеть  ;)

85
Как бы вы решали такую задачу?:
Дана таблица.
Колонки:
1. Сотрудник
2. Вид начисления
3. Дата начала
4. Дата окончания

3 и 4 - это период действия начисления (2) по данному сотруднику (1)

например:

1 | 1 | 01.01.2012 | 10.01.2012
1 | 1 | 20.01.2012 | 24.01.2012
2 | 1 | 05.01.2012 | 10.01.2012
2 | 2 | 10.02.2012 | 13.06.2012

По сотруднику #1 были начисления #1 в периодах с 01.01.2012 по 10.01.2012 и с 20.01.2012 по 24.01.2012
По сотруднику #2 было начисление #1 в периоде с 05.01.2012 по 10.01.2012, а также начисление #2 в периоде с 10.02.2012 по 13.06.2012

Все даты в таблице находятся в пределах одного года. Периоды могут пересекаться даже по одному тому же сотруднику и начислению.
например:

1 | 1 | 01.01.2012 | 10.01.2012
1 | 1 | 05.01.2012 | 24.01.2012

Нужно получить результат в виде таблицы с колонками:
1. Сотрудник
2. Вид начисления
3. Количество дней (с учетом пересечений периодов)

например для таблицы:

1 | 1 | 01.01.2012 | 10.01.2012
1 | 1 | 05.01.2012 | 24.01.2012
2 | 1 | 05.01.2012 | 10.01.2012
2 | 2 | 10.02.2012 | 13.02.2012

результат будет:

1 | 1 | 23
2 | 1 | 5
2 | 2 | 3

Для простоты можно полагать, что исходная таблица отсортирована по первым двум полям.

86
Общий раздел / Интересное чтиво
« : Август 01, 2012, 08:08:21 pm »
Открыл для себя книги ЭЛЕМЕНТЫ

Прочитал:
"Рождение сложности", "Простая одержимость", "Внутренняя рыба".

Больше всего понравилась "Рыба". Очень интересно. Читал взахлеб  :)

87
Общий раздел / Язык для прикладных задач
« : Август 01, 2012, 10:46:03 am »
Хочу поделиться одним наблюдением. При решении сложных прикладных задач над большими объемами данных узким местом практически всегда является чтение и запись этих самых данных. Т.е. скорость работы программы упирается в скорость жесткого диска, скорость сети, производительность сервера, да и вообще в нагруженность системы. Во что угодно, только не в скорость языка. По моим наблюдениям соотношение обычно 1:10, т.е. за десять минут работы программы код работает всего 1 минуту.
Вывод: решение прикладных задач на нативных языках не имеет смысла.

88
Общий раздел / Крымск
« : Июль 12, 2012, 10:14:51 am »
Цитировать
Морги крымска, абинска, геленджика, новороссийска и славянска-на-кубани переполнены, в крымске 7.07 с утра трупы газелями уже вывозили в соседние города тк класть некуда. часть лежит в фурах-холодильниках. ублюдские рожи путина и ткачева нагло гонят по тв сказку про дождь... один крымский мужик работает в следственном комитете края сказал что было 13!!! спусков воды за эту ночь, но официально им запрещено это говорить. прошу распространить информацию по знакомым - люди имеют право знать правду, так как ради тендеров на строительство и дележки бюджетных денег крысы могут подобное завтра или через лет 10 сделать в любом городе."

http://mrvorchun.livejournal.com/2808815.html

90
Общий раздел / Сила многоядерности
« : Июнь 19, 2012, 07:28:05 pm »
На днях купил жене нетбук на проце Atom N2600.
Машинка оказалась весьма приличной по производительности, учитывая что работает она 8 часов без дозаправки :)
Порылся во всемирной мусорке и набрел на одно старое, но довольно интересное сравнение:
Может ли Atom победить Pentium 4?

Atom сильно проигрывает Core, но старые архитектуры превосходит. И превосходит именно за счет двух ядер.

Я так понимаю, что хороший копилер сегодня - это компилер оптимизирующий под многие ядра.
Причем даже для мобильных платформ.

Получается, что ЧЯ сильно отстал от жизни. Я согласен что лишняя оптимизация это зло. Но в данном случае имхо это необходимый минимум для современного средства разработки.

Кто что думает по этому поводу?

Страницы: 1 ... 4 5 [6] 7 8