Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1

Безопасные указатели

25.02.2024, 17:29. Показов 2401. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Давно не писал сюда. Тему указателей, я затрагивал не раз, но желаемого консенсуса не смог достичь из этой темы, а именно безопасных указателей.. Может уместнее сказать линк, поскольку указатель - это и адресс в памяти, а линк наверное более объемлющее понятие, подходящее для переменной ссылочного типа, о чем пойдет речь. Что я имею в виду под безопасным, это такой линк, который можно инициализировать в переменную уровня модуля, и использовать в разных процедурах. Такой линк можно создать с помощью массива , но в случае сбоя или ошибки он непременно вызовет полный краш. В условиях прги на VB6 это не является проблеммой, поскольку скомпилированная программа должна существовать без ошибок, а любая ошибка - так или иначе крах. В VBA немного другая ситуация, там в случае не исправленной ошибки VBA также падает, (также может случиться что-то вроде "потери состояния"), что в общем не должно приводить к краху осноного приложения. Но вот в частности, всеж-таки это проихсодит при наличии лишних указателей в памяти. Однако сегодня внезапно я обнаружил, возможность создать, такие безопасные указатели/линки с помощью типа variant.
Решил я проверить, как работает передача разных переменных в функцию, с аргументами заданными как variant. И как выяснилось довольно не плохо работает. Как выясниось variant позволяет передавать по ссылке аргументы любого (стандартного) типа (Byte, Integer и т.д.). Я раньше задумывался над тем, как в VB реализовать аргумент по типу As Any, и можно сказать Variant в какой-то мере позволяет это сделать. Также, можно создать ссылку-указатель на уровне модуля и использовать ее в разных процедурах и при случае сбоя или ошибки, она не вызовет полный крах приложения. Есть, конечно нюансы. Вариантные пременные-ссылки должны быть в стеке, т.е. передаваться как аргументы,в ином случае ссылка слеатает.
Другой нюанс в ниже приведенном коде. Ключевое действие происходит в процедуре "Пример" и "testtest". После строчки
"vPtr1 = StrPtr(s) + 2 * 2" если в переменной vPtr2 поменят код символа, то должна меняться 3я буква в строке "s". В 32bit работат, в x64 почему-то нет, надеюсь на комментарии
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#If Win64 Then
    Const ptrSz As LongPtr = 8
    Const varSz As LongPtr = 24
#Else
    #If Not VBA7 Then
        Private Enum LongPtr
            [_]
        End Enum
    #End If
    Const ptrSz As LongPtr = 4
    Const varSz As LongPtr = 16
#End If
Private Declare PtrSafe Function ArrPtr Lib "VBE7" Alias "VarPtr" (var() As Any) As LongPtr
Private Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, Optional ByVal Length As LongPtr = ptrSz)
Private Type tpVariant
    vt As Integer
    r1 As Integer
    r2 As Integer
    r3 As Integer
    pt As LongPtr
    r4 As LongPtr
End Type
Private Enum vt
    VT_RefInt = &H4002 '16386
    VT_RefLng = &H4003 '16387
    VT_RefSng = &H4004 '16388
    VT_RefDbl = &H4005 '16389
    VT_RefCur = &H4006 '16390
    VT_RefStr = &H4008 '16392
    VT_RefByt = &H4011 '16401
    VT_RefLngLng = &H4014 '16404
#If Win64 Then
    VT_RefPtr = VT_RefLngLng
#Else
    VT_RefPtr = VT_RefLng
#End If
End Enum
 
Private blInit As Boolean
Private vLnk(1)
 
Sub Пример()
    If Not blInit Then
        InitVarLink vLnk(0), vLnk(1), VT_RefInt
        blInit = True
    End If
    testtest vLnk(0), vLnk(1)
End Sub
 
Sub testtest(ByRef vPtr1 As Variant, ByRef vPtr2 As Variant)
    Dim s$
    
    s = "abcd"
    
    vPtr1 = StrPtr(s) + 2 * 2 'установка указателя на 3 буву в строке s
    
    Stop
End Sub
 
Sub InitVarLink(v1, v2, tp%)
    MakeVarLink 0, v2, tp                     'создание вариантной ссылки нужног типа
    MakeVarLink VarPtr(v2) + 8, v1, VT_RefPtr 'создание ссылки на указатель первой (v2) ссылки
End Sub
Sub MakeVarLink(ByVal ptr As LongPtr, ByRef vLnk As Variant, ByVal vt As Integer)
    Dim tpVar As tpVariant
    tpVar.vt = vt
    tpVar.pt = ptr
    CopyMemory vLnk, tpVar, varSz
End Sub
2
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2024, 17:29
Ответы с готовыми решениями:

Безопасные скрипты
Вообщем обясните как защититься от XSS SQL... и прочего зла)

Безопасные пути
В некотором далёком царстве есть система дорог, представляющая собой неориентированный граф. Каждая дорога соединяет два различных города....

безопасные среды
вопрос в том,в чем состоит понятие "безопасные среды" именно для распределенных БД...в инете нашла пару интересных вариантов,...

22
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
26.02.2024, 02:19  [ТС]
Для краткого понимания сути темы можно привести такой макрос. При его пошаговом исполнении можно увидеть, что значения одновременно меняютс в двух переменных i и v. Причем, как уже говорилось выше variant должен быть прописан в стеке аргументов, иначе "волшебство" не работает.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub test(Optional v)
    Dim i%
    i = 2
    Stop
    MakeVarLink2 i, v
    i = 10
    Stop
    v = 6
    Stop
    i = 15
    Stop
End Sub
Sub MakeVarLink2(v1, v2)
    CopyMemory v2, v1, varSz
End Sub
1
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
26.02.2024, 10:23
testuser2, большое спасибо за проделанную работу!
Сейчас нет времени изучить, но я вернусь к теме, как смогу.
1
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
26.02.2024, 12:44  [ТС]
Jack Famous, привет! Тема указателей, конечно не простая и немного запутаная и еще, что я заметил, на VBA x64 VBA есть не мало припонов, в сравнении, с x32 vba/vb6, всякие ptrsafe, более медленные winapi и т.д. Кстати вот еще один недостаток нашелся.
Цитата Сообщение от testuser2 Посмотреть сообщение
В 32bit работат, в x64 почему-то нет
Причина оказалась на поверхности
Visual Basic
1
2
3
4
5
6
7
8
9
Sub test22()
    Dim lp As LongPtr '(LongLong)
    
    testLongLongInVariant lp
End Sub
 
Sub testLongLongInVariant(vll)
    vll = VarPtr(vll)
End Sub
Во второй процедуре ошибка
Code
1
2
Run-time error '458':
Variable uses an Automation type not supported in Visual Basic
То беж в variant (x64) тупо нет полной поддержки типа LongLong как ссылки (ByRef), читать можем, а писать в него - нет.
1
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
26.02.2024, 13:32  [ТС]
Однако, currency может быть заменой...
Миниатюры
Безопасные указатели  
1
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
26.02.2024, 15:30  [ТС]
Все, "безопасные указатели" заработали и на VBAx64! В коде из #1 следует поменять строчки (см. 14 и 23).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub Пример()
    If Not blInit Then
        InitVarLink vLnk(0), vLnk(1), VT_RefInt
        blInit = True
    End If
    testtest vLnk(0), vLnk(1)
End Sub
 
Sub testtest(ByRef vPtr1 As Variant, ByRef vPtr2 As Variant)
    Dim s$
    
    s = "abcd"
    
    vPtr1 = (StrPtr(s) + 2 * 2) * 0.0001 'установка указателя на 3 буву в строке s
    Debug.Print s
    vPtr2 = 120 'меняем код символа
    Debug.Print s
    Stop
End Sub
 
Sub InitVarLink(v1, v2, tp%)
    MakeVarLink 0, v2, tp                     'создание вариантной ссылки нужног типа
    MakeVarLink VarPtr(v2) + 8, v1, VT_RefCur 'создание ссылки на указатель первой (v2) ссылки
End Sub
Sub MakeVarLink(ByVal ptr As LongPtr, ByRef vLnk1 As Variant, ByVal vt As Integer)
    Dim tpVar As tpVariant
    tpVar.vt = vt
    tpVar.pt = ptr
    CopyMemory vLnk1, tpVar, varSz
End Sub
Добавлено через 1 час 38 минут
Работать работает, однако переносимость кода страдает..
Цитата Сообщение от testuser2 Посмотреть сообщение
желаемого консенсуса
нет консенсуса, того, которого бы хотелося
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
02.03.2024, 13:12
Цитата Сообщение от testuser2 Посмотреть сообщение
нет консенсуса, того, которого бы хотелося
В нашей жизни не всегда всё так, как нам хочется
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
02.03.2024, 16:02  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
В нашей жизни не всегда всё так, как нам хочется
Безспорно, тем более когда речь идет о всякого рода "недокументалке". В данном случае конечно вопрос можно просто решить константой - множителем (прекомпилируемой ) которая в 32bit будет = 1, в x64 - 0.0001 и будет
Цитата Сообщение от testuser2 Посмотреть сообщение
переносимость
VB вообще хорош тем, что опирается на стандартные классы и объекты системы и моежет использовать их возможности. Вот я хотел также покопаться в Стар-бейсике (в Либреофисе), посмотреть, как там байты копируются. Но там дела с этим, к сожалению, куда печальней. Там поддерживаются Winapi функции, но, дпустим, нельзя передать параметр ByVal функции, так, как это реализовано в VB, т.е. нельзя передать указатель значением функции и нельзя, допустим вызывать юникодные w-версии функций.

Добавлено через 1 час 21 минуту
Касаемо сабжевой темы, к ней можно было бы подойти с другого ракурса, т.е. поставить вопрос по другому, допустим: "как боротьс с потерей состояния". Недавно узнал как это вообще называется "потеря состояния" по простому просто - полное обнуление переменных. Происходит это при явной или даже неявной ошибке или если просто нажать стоп (reset) в vba-редакторе (вопрос конечно чито vba-шный). Идеальным решением было бы сохранение отдельных (не обязательно все, а допустим некоторых глобальных) переменных от такого стирание.
Кстати говоря , я, видел такую возможно, когда баловался с потоками на vba, что если запущен поток и он использует какую-то глобальную переменную, и в этот момент нажать "стоп" (поток при этом не останавливается), то данная переменная не обнуляется. Т.н. "сборщик мусора" ее не трогает. Но с потоками тема, конечно не надежная.
Кстати говоря(2), я видел возможность защитить данные от "потери состояния" с одной оговоркой, что эти данные должны быть помещены в объект (допустим коллекцию или словарь). Объект при том должен быть зарегистрированого в системе класса, т.е. внутренний vba-шный класс не поканает в д.сл. Хороший пример на stackoverflow. Функция GetPersistentDictionary - там используются взможности dotnet (mscoree). Я сделал свою версию, более универсальную (под любой объект) и вместо mscoree используются похожий опционал Shell.Application
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private PersColl As Collection
 
Sub Пример()
    Dim elem
    
    Set PersColl = GetPersistObj("PersColl", New Collection)
    
    If PersColl.Count = 0 Then
        PersColl.Add "item1"
        PersColl.Add "12345"
        PersColl.Add "xxxxx"
    Else
        For Each elem In PersColl
            Debug.Print elem
        Next
    End If
    
    End 'имитируем "потерю состояния"
End Sub
 
Public Function GetPersistObj(name, vObj)
      Dim oWnd As Object
      
      For Each oWnd In CreateObject("Shell.Application").Windows
          If Not IsObject(oWnd.GetProperty(name)) Then
              GoTo 1
          End If
          Exit For
      Next
      If oWnd Is Nothing Then
          Set oWnd = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
1         oWnd.PutProperty name, vObj
      Else
          Set vObj = oWnd.GetProperty(name)
      End If
      
      Set GetPersistObj = vObj
End Function


Добавлено через 16 минут
Выше приведенным кодом можно сохранить объект (и все данные в нем) и восстановить ссылку на него после "обнуления", но это не решает, конено вопрос со стеком переменных..
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
02.03.2024, 18:07
Цитата Сообщение от testuser2 Посмотреть сообщение
Безспорно
Бесспорно
Даже я помню, как ещё в школе учили правописание приставки Без, Бес в зависимости от того следующая буква будет глухая или звонкая...

Добавлено через 3 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
нельзя, допустим вызывать юникодные w-версии функций
кому такое нужно тогда...

Добавлено через 5 минут
Есть же SetEnvironmentVariable и GetEnvironmentVariable функции если тебе нужно запоминать переменные надолго, даже после остановки проекта...
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
02.03.2024, 18:45  [ТС]
Вот есть функция среди "функций кучи" VirtualProtectFromApp
Цитата Сообщение от HackerVlad Посмотреть сообщение
правописание приставки Без, Бес в зависимости от того следующая буква будет глухая или звонкая...
Это спорноеправило..
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
03.03.2024, 04:13  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Вот есть функция среди "функций кучи" VirtualProtectFromApp
забыл удалить строчку, ни че не получилось с этими функциями кучи кроме феталати
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
03.03.2024, 11:53  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
стати говоря , я, видел такую возможно, когда баловался с потоками на vba, что если запущен поток и он использует какую-то глобальную переменную, и в этот момент нажать "стоп" (поток при этом не останавливается), то данная переменная не обнуляется. Т.н. "сборщик мусора" ее не трогает. Но с потоками тема, конечно не надежная.
Чертово дерьмо, это недостоверная информация, перепроверил - не работает, все обнуляется
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
04.03.2024, 00:22
testuser2, хз
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
05.03.2024, 16:41  [ТС]
Пару слов стоит сказать, о строковых ссылках, т.е. об ссылках, которые создаются подменой указателя строковой переменной. Это, можно сказать, не безопасные указатели. Однако есть один случай, когда они становятся абсолютно безопасными - в строковом массиве, если в его структуре установить флаг FADF_HAVEVARTYPE. В примере на строку s создается ссылка в строковом массиве, по окончании процедруры массив уничтожается, но строка остается не вредимой, при том, что абсолютно ни чего не предринимается для освобождения лишних указателей. Если убрать строки 11, 12 ситуация будет иная.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub testStrArray()
    Dim s$
    s = "abcdefg"
    testStrArray_ s
End Sub
Sub testStrArray_(s$)
    Dim l&, sArr() As String
    Dim pSA&
    
    ReDim sArr(0)
    GetMem4 ByVal VarPtr(l) - 4, pSA 'получаем указатель SA массива sArr
    GetMem4 &H80, ByVal pSA + 2      'ставим флаг FADF_HAVEVARTYPE в структуру SA
    
    GetMem4 StrPtr(s), ByVal VarPtr(sArr(0)) 'создаем ссылку на строку s в sArr(0)
    
End Sub
Однако с UDT, содержащим строки такой подход не работает, как я понял, разбираясь с использованием ссылок в коллекции(хеш-таблице) The trick-а. В массиве UDT, видимо, нельзя безопасно хранить (хотя кто его знает..) строковые ссылки. Под безопасностью я понимаю возможность, нажатать stop/reset во время отладки и отсутстивия при этом сбоя. Хотя FADF_HAVEVARTYPE всё же помогает при освобождении этих ссылок. Для примера хорошо подойдет структура упомянутой хэш-таблицы. Там массив структуры, содержащих в себе вложенные дин. массивы внутри которых (которого) мы поместим строковую ссылку (Key). Несмотря на вложенные массивы достаточно добавить FADF_HAVEVARTYPE в заголовок коренного массива, чтобы правильно освободить указатели. Однако есть еще момент, очищать массив нужно так "ti = emp" если убрать строку или использовать erase "волшебство" не работает.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Type tPointer                                                           ' Индекс в таблице объектов
    Hash As Integer                                                             ' Хэш
    Index As Integer                                                            ' Индекс
End Type
Private Type tElement                                                           ' Колонка хэш таблицы
    Key As String                                                               ' Ключ
    Value As Variant                                                            ' Значение
    Next As tPointer                                                            ' Индекс следующего элемента
    Prev As tPointer                                                            ' Индекс предыдущего элемента
End Type
Private Type tItem                                                              ' Строка хэш таблицы
    ElementsCount As Long                                                       ' Количество коллизий+1
    Elements() As tElement                                                      ' Элементы
End Type
 
Sub UdtWithString()
    Dim s$
    s = "abcdef"
    UdtWithString_ s
End Sub
 
Sub UdtWithString_(s$)
    Dim ti() As tItem, emp() As tItem, pSA&
    
    ReDim ti(0)
    ReDim ti(0).Elements(0)
    
    GetMem4 StrPtr(s), ByVal VarPtr(ti(0).Elements(0).Key)
    
    GetMem4 ByVal ArrPtr(ti), pSA
    GetMem2 &H80, ByVal pSA + 2 'FADF_HAVEVARTYPE 
    
    ti = emp       
'    Erase ti
End Sub
3
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
06.03.2024, 13:33
testuser2, меня кстати иностранный форум поздравил с днём рождения и даже подарил бесплатные книги, а этот форум не поздравляет
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
06.03.2024, 14:09  [ТС]
HackerVlad, поздравляю, желаю успехов и процветания в новом году! Интересно, что за книги?
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
06.03.2024, 22:08
testuser2, книги вот такие:

* Полное руководство по облачным вычислениям
* Понимание терминов облачных вычислений
* Введение в HTML5
1
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
08.03.2024, 12:14  [ТС]
Универсальный делатель вариантных ссылок. Возможно что-то не учел, но учел даже тип decimal, который в VB поддерживается только внутри варианта, оказывается на него тоже можно сделать ссылку и изменять значение по этой ссылке, при том, без использования функции CDec(), как при обычном присвоении.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Sub Пример(Optional vLnk)
    Dim v, i&, s$
    
    s = "abcd"
    MakeVarLink s, vLnk
    Stop
    vLnk = "ifgh"
    Stop
    
    v = 32432
    MakeVarLink v, vLnk
    Stop
    vLnk = 5555
    Stop
    
    v = CDec(35353522522.3423)
    MakeVarLink v, vLnk
    Stop
    vLnk = 234324.2343332 'vLnk = CDec(234324.2343332)
    Stop
    
    v = #3/1/2024#
    MakeVarLink v, vLnk
    Stop
    vLnk = Now
    Stop
End Sub
 
Sub MakeVarLink(Var, Lnk)
'    VT_Ref = &H4000
    Dim vt%
    GetMem2 Var, vt
    If vt < 18 Then
        On vt GoTo 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 2, 2, 1
        GoTo 2
1       GetMem2 VT_Ref Xor vt, Lnk  'не ссылка
        GetMem4 VarPtr(Var) + 8, ByVal VarPtr(Lnk) + 8
    Else
2       If (vt Xor VT_Ref) = VBObject Then 'ссылка
            Set Lnk = Var           'ссылка на объект
        Else
            CopyMemory Lnk, Var, varSz
        End If
    End If
    Exit Sub
3   GetMem2 VT_Ref Xor vt, Lnk      'decimal
    GetMem4 VarPtr(Var), ByVal VarPtr(Lnk) + 8
End Sub
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
08.03.2024, 15:16
Цитата Сообщение от testuser2 Посмотреть сообщение
функции CDec()
А что это за функция за такая?
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,599
Записей в блоге: 1
08.03.2024, 15:33  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
А что это за функция за такая?
Преобразование к типу decimal или его получение.

Добавлено через 14 минут
Я если честно, сам не знаю, что за тип такой децимал, вроде бы для более точных вычислений. Такая структура у него
Visual Basic
1
2
3
4
5
6
7
Private Type tagDEC 'decimal
    vt As Integer   'wReserved
    scale As Byte
    sign As Byte
    Hi32 As Long
    Lo64 As Currency
End Type
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2024, 15:33
Помогаю со студенческими работами здесь

Безопасные запросы по АПИ
Здравствуйте уважаемые форумчане. Столкнулся с такой проблемой: был взломан сайт и украдены логин и пароль от базы. Т.к. это была моя...

Самые безопасные оптимизаторы и деинсталляторы
Я решил сделать небольшой анализ &quot;Оптимизаторов&quot; и &quot;Деинсталляторов&quot; для того, чтобы найти самые безопасные из них. Учтите, что этот анализ...

Какие ЖК мониторы сейчас самые безопасные?
Раньше были наклейки вроде ТСО 99 и т.п., а сейчас как выбрать самый безопасный монитор?

Динамическое программирование: найти безопасные пути для кузнечика
кузнечик может прыгать на 1,2 или 3 позиции. на некоторых позициях сидят лягушки, которые съедают кузнечика. необходимо подсчитать, сколько...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru