OEP(протекторы).

Тема в разделе "WASM.RESEARCH", создана пользователем Indy_, 3 апр 2019.

  1. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Вот что выдал VB Decompiler:
    000.png

    Вот код который я разреверсил:

    Код (Text):
    1. ' Decompiled by The trick 2015
    2. Option Explicit
    3. Private Sub Command1_Click()
    4.     Dim ebp64() As Long
    5.     Dim ebp44   As Long
    6.     Dim ebp30   As Long
    7.     Dim ebp60() As Variant
    8.     Dim ebp104  As Long
    9.     Dim ebp24   As Long
    10.     Dim ebp2c   As Long
    11.     Dim ebp28   As Long
    12.     Dim ebp108  As Long
    13.     Dim ebp40   As Variant
    14.     Dim ebp4c   As Long
    15.  
    16.     ebp44 = proc_710(ebp64())
    17.  
    18.     ebp30 = CLng(CDbl(Text3.Text))
    19.  
    20.     List1.Clear
    21.     Label2.Visible = True
    22.     txtRes.Text = vbNullString
    23.     txtRes1.Text = vbNullString
    24.     Command1.Enabled = False
    25.  
    26.     DoEvents
    27.  
    28.     ReDim ebp60(1 To 1)
    29.  
    30.     For ebp24 = 1 To ebp44
    31.      
    32.         For ebp28 = 1 To ebp64(ebp24, 2)
    33.      
    34.             ebp2c = ebp2c + 1
    35.          
    36.             ReDim Preserve ebp60(1 To ebp2c)
    37.             ebp60(ebp2c) = ebp64(ebp24, 1)
    38.         Next
    39.      
    40.     Next
    41.  
    42.     Dim ebp5c   As String
    43.     Dim ebp54   As String
    44.     Dim ebp114  As Long
    45.     Dim ebp110  As Long
    46.     Dim ebpa8   As Variant
    47.     Dim ebp50   As Long
    48.     Dim ebp184  As Double
    49.     Dim ebp48   As Long
    50.     Dim ebp58   As Long
    51.     Dim ebpec   As Long
    52.     Dim ebpd0   As Boolean
    53.  
    54.     ' LOOP_1
    55.     Do
    56.      
    57.         ebp5c = vbNullString
    58.         ebp50 = 0
    59.      
    60.         Call proc_704(ebp60, ebp2c)
    61.      
    62.         ebp40 = LongSumEl(ebp60, ebp30, ebp4c)
    63.      
    64.         ' CONDITION_VARTYPE
    65.         If VarType(ebp40) = (vbArray Or vbLong) Then
    66.             ' FOR_1
    67.             For ebp24 = LBound(ebp40) To UBound(ebp40)
    68.                 ' CONDITION_EBP40
    69.                 If ebp40(ebp24) <> 0 Then
    70.                  
    71.                     ebp5c = ebp5c & ebpa8 & ebp40(ebp24) & "   "
    72.                     ebp50 = CLng(ebp40(ebp24) + ebp50)
    73.                     ' FOR_2
    74.                     For ebp28 = 1 To ebp2c
    75.                      
    76.                         ' CONDITION_EQUALS
    77.                         If ebp60(ebp28) = ebp40(ebp24) Then
    78.                          
    79.                             ebp40(ebp24) = 0
    80.                             ebp60(ebp28) = 0
    81.  
    82.                         End If
    83.                      
    84.                     Next
    85.                  
    86.                 End If
    87.              
    88.             Next
    89.  
    90.             Label2.Caption = CStr(Val(CStr(ebp2c / 100)))
    91.          
    92.             DoEvents
    93.          
    94.             If ebp50 = 0 Then Exit Do
    95.          
    96.             ebp54 = ebp54 & (ebp48 + 1) & "." & Chr$(9) & ebp5c & "   Отходы  " & CStr(ebp30 - ebp50) & vbNewLine
    97.          
    98.             ebp58 = ebp58 + (ebp30 - ebp50)
    99.             ebp48 = ebp48 + 1
    100.      
    101.         Else
    102.          
    103.             ebpec = proc_708(ebp60, ebp2c)
    104.          
    105.             ' CONDITION_EBPEC
    106.             If ebpec < ebp30 And ebp40 <> ebp30 Then
    107.                 ' FOR_3
    108.                 For ebp28 = 1 To ebp2c
    109.                  
    110.                     ' CONDITION_EBP60_NE
    111.                     If ebp60(ebp28) <> 0 Then
    112.                      
    113.                         ebp5c = ebp60(ebp28) & "   " & ebp5c
    114.                         ebp60(ebp28) = 0
    115.                      
    116.                     End If
    117.                  
    118.                 Next
    119.        
    120.                 ebp54 = ebp54 & CStr(ebp48 + 1) & "." & Chr$(9) & ebp5c & "   Отходы  " & ebp40 & vbNewLine
    121.                 ebp58 = ebp58 + Val(CStr(ebp40))
    122.              
    123.                 ebp48 = ebp48 + 1
    124.                 Exit Do
    125.              
    126.             End If
    127.             ebpec = proc_70c(ebp64(), ebp44)
    128.          
    129.             If ebp4c > ebpec Then Exit Do
    130.          
    131.             ebp4c = ebp4c + 5
    132.          
    133.         End If
    134.      
    135.     Loop
    136.     On Error Resume Next
    137.  
    138.     List1.AddItem " "
    139.     List1.AddItem "Всего потребуется досок " & ebp48
    140.     List1.AddItem "Отходы (всего ) " & ebp58
    141.     ' !!!!!!!!!!!!! Check ebpa8
    142.     ebpa8 = Round(ebp58 / ebp30, 2)
    143.     List1.AddItem "Отходы (доски, шт) " & ebpa8
    144.  
    145.     ebpa8 = Round(ebp58 / ebp30 / ebp48 * 100, 2)
    146.     List1.AddItem "Отходы (всего, %) " & ebpa8
    147.  
    148.     txtRes.Text = ebp54
    149.     Label2.Visible = False
    150.  
    151.     Command1.Enabled = True
    152.  
    153.     DoEvents
    154.  
    155.     txtRes1.Text = proc_700(ebp54)
    156.  
    157. End Sub
    158. Private Function proc_700(v1 As String) As String
    159.     Dim ebp24 As Long
    160.     Dim ebp34 As Variant
    161.     Dim ebp38 As String
    162.     Dim ebp18 As Long
    163.     Dim ebp20 As Long
    164.  
    165.     ebp34 = Split(v1, vbNewLine)
    166.     ebp24 = UBound(ebp34)
    167.     ebp38 = Split(ebp34(0), Chr$(9))(1)
    168.     ebp20 = 1
    169.  
    170.     ' FOR_EBP18
    171.     For ebp18 = 1 To ebp24
    172.         ' CONDITION_EBP18
    173.         If ebp34(ebp18) <> vbNullString Then
    174.             ' CONDITION_SPLIT
    175.             If Split(ebp34(ebp18), Chr$(9))(1) = ebp38 Then
    176.          
    177.                 ebp20 = ebp20 + 1
    178.              
    179.             Else
    180.          
    181.                 proc_700 = proc_700 & CStr(ebp20) & " раз " & Chr$(9) & ebp38 & vbNewLine
    182.              
    183.                 ebp20 = 1
    184.              
    185.                 If ebp34(ebp18) <> vbNullString Then
    186.                  
    187.                    ebp38 = Split(ebp34(ebp18), Chr$(9))(1)
    188.                  
    189.                 End If
    190.              
    191.             End If
    192.          
    193.         End If
    194.      
    195.     Next
    196.  
    197.     proc_700 = proc_700 & CStr(ebp20) & " раз " & Chr$(9) & ebp38 & vbNewLine
    198.  
    199. End Function
    200. Private Function proc_70c(v() As Long, v1 As Variant) As Long
    201.     Dim edi     As Long
    202.  
    203.     proc_70c = v(1, 1)
    204.  
    205.     If v1 < 1 Then Exit Function
    206.  
    207.     For edi = 1 To v1
    208.  
    209.         If v(edi, 1) > proc_70c Then
    210.          
    211.             If v(edi, 2) > 0 Then
    212.                 proc_70c = v(edi, 1)
    213.             End If
    214.          
    215.         End If
    216.      
    217.     Next
    218. End Function
    219. Private Function proc_708(v() As Variant, v1 As Long) As Long
    220.     Dim edi As Long
    221.  
    222.     For edi = 1 To v1
    223.         proc_708 = proc_708 + v(edi)
    224.     Next
    225. End Function
    226. Public Function LongSumEl(v() As Variant, v1 As Long, v2 As Long) As Variant
    227.     Dim ebp40() As Long
    228.     Dim ebp44() As Long
    229.     Dim esi     As Long
    230.     Dim ebp7c   As Long
    231.     Dim ebp18   As Long
    232.     Dim ebp1c   As Long
    233.     Dim ebp34   As Long
    234.     Dim ebp38   As Long
    235.     Dim edi     As Long
    236.     ebp34 = v1 - v2
    237.  
    238.     If v1 > 80000000 Or v1 < 0 Then Exit Function
    239.  
    240.     ReDim ebp40(v1)
    241.  
    242.     For esi = 1 To v1
    243.         ebp40(esi) = -1
    244.     Next
    245.  
    246.     ebp7c = UBound(v(), 1)
    247.  
    248.     For ebp18 = 1 To ebp7c
    249.         ebp1c = v1 - v(ebp18)
    250.         Do While ebp1c >= 0
    251.             If ebp40(ebp1c) >= 0 Then
    252.          
    253.                 edi = v(ebp18) + ebp1c
    254.              
    255.                 If ebp40(edi) = -1 Then ebp40(edi) = ebp1c
    256.  
    257.                 If edi >= ebp34 Then
    258.                  
    259.                     Do
    260.                         ebp38 = ebp38 + 1
    261.                  
    262.                         ReDim Preserve ebp44(1 To ebp38)
    263.                         ebp44(ebp38) = edi - ebp40(edi)
    264.                         edi = ebp40(edi)
    265.                      
    266.                     Loop While edi
    267.                  
    268.                     LongSumEl = ebp44()
    269.                  
    270.                     Exit Function
    271.                  
    272.                 End If
    273.              
    274.             End If
    275.          
    276.             ebp1c = ebp1c - 1
    277.          
    278.         Loop
    279.     Next
    280.  
    281.     edi = v1
    282.  
    283.     Do While edi >= 1
    284.         If ebp40(edi) >= 0 Then Exit Do
    285.         edi = edi - 1
    286.      
    287.     Loop
    288.  
    289.     LongSumEl = v1 - edi
    290.  
    291. End Function
    292. Private Sub proc_704(v As Variant, l As Long) ' +704
    293.     Dim ebp1c() As Variant
    294.     Dim ebp14   As Long
    295.     Dim esi     As Long
    296.  
    297.     ReDim ebp1c(1 To 1)
    298.  
    299.     For ebp14 = 1 To l
    300.      
    301.         If v(ebp14) <> 0 Then
    302.          
    303.             esi = esi + 1
    304.          
    305.             ReDim Preserve ebp1c(1 To esi)
    306.          
    307.             ebp1c(esi) = v(ebp14)
    308.          
    309.         End If
    310.      
    311.     Next
    312.  
    313.     v = ebp1c()
    314.     l = esi
    315.  
    316. End Sub
    317. Private Function proc_710(arr() As Long) As Long
    318.     Dim i As Integer
    319.  
    320.     ReDim arr(1 To 5, 1 To 2)
    321.  
    322.     For i = 0 To 4
    323.      
    324.         arr(i + 1, 1) = CLng(CDbl(Text1(i).Text))
    325.         arr(i + 1, 2) = CLng(CDbl(Text2(i).Text))
    326.      
    327.     Next
    328.  
    329.     proc_710 = 5
    330.  
    331. End Function
    Вот оригинальный код:

    Код (Text):
    1. Option Explicit
    2. Private Type typeBrd
    3.     LenB As Long
    4.     CntB As Long
    5. End Type
    6. Private Sub Command1_Click()
    7.      Dim arr(), res, ArrB() As typeBrd, k As Long, dL As Long, t0 As Long, tL As Long, st As String
    8.      Dim n As Long, i As Long, j As Long, LB As Long, sum As Long, s As String ', x As Long
    9.      Call GetData(ArrB(), n)
    10.      LB = Val(Text3.Text): List1.Clear: Label2.Visible = True: txtRes.Text = "": txtRes1.Text = "": Command1.Enabled = False: DoEvents
    11.      ReDim arr(1 To 1)
    12.      For i = 1 To n
    13.          For j = 1 To ArrB(i).CntB
    14.             k = k + 1
    15.             ReDim Preserve arr(1 To k): arr(k) = ArrB(i).LenB ' Переписываем длины в одномерный массив чтобы скормить функции
    16.          Next j
    17.      Next i
    18. m:   Do
    19.        sum = 0: s = ""
    20.        Call compRes(arr, k)
    21.        res = LongSumEl(arr(), LB, dL)
    22.        If VarType(res) = 8195 Then 'Если функция вернула массив, то
    23.           For i = LBound(res) To UBound(res)
    24.                If res(i) <> 0 Then
    25.                    s = s & res(i) & "   ": sum = sum + res(i)
    26.                    For j = 1 To k 'Убираем из массива использованные элементы
    27.                         If res(i) = arr(j) Then res(i) = 0: arr(j) = 0  '
    28.                    Next j
    29.                End If
    30.           Next i
    31.           Label2.Caption = Val(k / 100): DoEvents
    32.           If sum = 0 Then GoTo m1
    33.           st = st & tL + 1 & "." & vbTab & s & "   Отходы  " & LB - sum & vbCrLf
    34.           t0 = t0 + (LB - sum): tL = tL + 1
    35.        Else
    36.           If sumRes(arr, k) < LB And res <> LB Then
    37.             For j = 1 To k
    38.                   If arr(j) <> 0 Then s = s & arr(j) & "   ": arr(j) = 0
    39.             Next j
    40.             st = st & tL + 1 & "." & vbTab & s & "   Отходы  " & res & vbCrLf
    41.             t0 = t0 + Val(res): tL = tL + 1
    42.             GoTo m1
    43.           End If
    44.           Exit Do
    45.        End If
    46.     Loop
    47.  
    48.     If dL <= maxL(ArrB(), n) Then dL = dL + 5: GoTo m
    49. m1:
    50.     'Вывод результата
    51.      On Error Resume Next
    52.     List1.AddItem " "
    53.     List1.AddItem "Всего потребуется досок " & tL
    54.     List1.AddItem "Отходы (всего ) " & t0
    55.     List1.AddItem "Отходы (доски, шт) " & Round(t0 / LB, 2)
    56.     List1.AddItem "Отходы (всего, %) " & Round(((t0 / LB) / tL) * 100, 2)
    57.     txtRes.Text = st
    58.     Label2.Visible = False: Command1.Enabled = True: DoEvents
    59.     txtRes1.Text = compStr(st)
    60.     'MsgBox "Всего потребуется досок " & tL & vbCrLf & "Отходы (всего, м) " & t0 & _
    61.              vbCrLf & "Отходы (доски, шт) " & Round(t0 / LB, 2) & _
    62.              vbCrLf & "Отходы (всего, %) " & Round(((t0 / LB) / tL) * 100, 2)
    63. End Sub
    64. Private Function compStr(s As String) As String
    65.     Dim st, i As Long, j As Long, n As Long, tmp1 As String, tmp2 As String, k As Long
    66.     st = Split(s, vbCrLf): n = UBound(st)
    67.     tmp1 = Split(st(0), vbTab)(1)
    68.     k = 1
    69.     For i = 1 To n
    70.         If st(i) <> "" Then
    71.          tmp2 = Split(st(i), vbTab)(1)
    72.          If tmp1 = tmp2 Then
    73.              k = k + 1
    74.          Else
    75.              compStr = compStr & k & " раз " & vbTab & tmp1 & vbCrLf
    76.              k = 1
    77.              If st(i) <> "" Then tmp1 = Split(st(i), vbTab)(1)
    78.          End If
    79.         End If
    80.     Next i
    81.     compStr = compStr & k & " раз " & vbTab & tmp1 & vbCrLf
    82. End Function
    83. Private Sub compRes(res, n As Long)
    84.     Dim a() As Variant, i As Long, k As Long
    85.     ReDim a(1 To 1)
    86.     For i = 1 To n
    87.         If res(i) <> 0 Then k = k + 1: ReDim Preserve a(1 To k): a(k) = res(i)
    88.     Next i
    89.     res = a: n = k
    90. End Sub
    91. Private Function sumRes(a(), n As Long) As Long
    92.     Dim i As Long
    93.     For i = 1 To n
    94.         sumRes = sumRes + a(i)
    95.     Next i
    96. End Function
    97. Private Function maxL(ArrB() As typeBrd, n) As Long
    98.     Dim i As Long: maxL = ArrB(1).LenB
    99.     For i = 1 To n
    100.         If ArrB(i).LenB > maxL And ArrB(i).CntB > 0 Then maxL = ArrB(i).LenB
    101.     Next i
    102. End Function
    103. Private Sub GetData(ArrB() As typeBrd, n As Long)
    104.      n = 5
    105.      ReDim ArrB(1 To n)
    106.      Dim i As Long
    107.      For i = 1 To n
    108.          ArrB(i).LenB = Val(Text1(i - 1).Text)
    109.          ArrB(i).CntB = Val(Text2(i - 1).Text)
    110.      Next i
    111. End Sub
    112. 'Функция не моя(не SoftIce), нашел на просторах интернета
    113. Function LongSumEl(arr(), sm As Long, Optional ds As Long = 0)
    114.     Dim out&(), i&, j&, k&, n&, L&, sm1&
    115.  
    116.     n = sm ' + ds 'вот здесь я поправил
    117.     sm1 = sm - ds
    118.  
    119.     If n > 80000000 Or n < 0 Then Exit Function
    120.     ReDim a&(n)
    121.  
    122.     For i = 1 To n: a(i) = -1: Next i
    123.     For i = 1 To UBound(arr)
    124.         For j = n - arr(i) To 0 Step -1
    125.             If a(j) >= 0 Then
    126.                 k = j + arr(i)
    127.                 If a(k) = -1 Then a(k) = j
    128.                 If k >= sm1 Then
    129.                     Do
    130.                         L = L + 1
    131.                         ReDim Preserve out&(1 To L)
    132.                         out(L) = k - a(k)
    133.                         k = a(k)
    134.                     Loop While k
    135.                     LongSumEl = out
    136.                     Exit Function
    137.                 End If
    138.             End If
    139.     Next j, i
    140.     For i = sm To 1 Step -1
    141.         If a(i) >= 0 Then Exit For
    142.     Next i
    143.     LongSumEl = sm - i
    144. End Function
     
    Последнее редактирование: 28 фев 2021
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ну вроде да, это был именно vb decompiler, отношения с которым у меня не сложились. Скриншот не затащился, видимо по той же причине, по которой я не смог его посмотреть на сайте.
     
  3. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Rel, обновил скрин.
     
  4. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Вот именно, что многопоточность не поддерживается, про сабклассинг - я писал выше (ActiveX) это не то.
    Да, есть стандартные PE-лоадеры - типа крипты даже на нём, но при чём тут многопоточность и вызов API через Declare? Да и с _cdecl проблем нет, никто LoadLibrary не отменял.
    P.S: А нафига вообще этот паровоз, когда давно уже электропоезда изобрели и даже на магнитной подушке :)
     
  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Я вообще тебя не понял. Многопоточность поддерживается. Что это тогда по-твоему:

    upload_2021-2-28_21-52-33.png
    ?


    Ты вообще о чем? Ты похоже один из тех программеров кто не осилил его. В общем если хочешь какие-либо свои мысли изложить по этому поводу, или пруфы многопоточности и т.п. создай отдельный топик в специальном разделе. Я тебе с удовольствием предоставлю все что тебе необходимо, возможно ты изменишь свой взгляд на этот продукт. Я не хочу эту тему здесь развивать. Ок?
     
    M0rg0t нравится это.
  6. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Про "поезда и паровозы объяснюсь":
    VB6 хорош тем что реально на коленке без всяких зависимостей можно сделать гуй, если нет под рукой наработок и нет времени, для экстремального программирования гуев - только в путь, в то же время он не обеспечивает необходимой скорости других задач. Можно при желании прицепить 1 кликом ocx всякие с красивостями и потом все это той же IDE вхреначить в инсталлятор, причем быстро и не дорого соответственно. Но на нём писать, используя какие то приблуды типа инлайн асмов - это для заказчиков - лохов наверное, но никак не профиты, это изврат.
    --- Сообщение объединено, 28 фев 2021 ---
    Thetrik, я тебе и говорил что сабклассинг ActiveX и прочее, попробуй exe замутить на нём многопоточный..........
    ADD: и глянь чтоб не было вылетов и сколько реально потоков создается, тем же ProcessHacker или ProcessExplorer. msvbvm60 априори однопоточка. Решалось когда то тупо через Fiber'ы, конечные автоматы или события, имхо как не крути, но многопоточку exe обычный ты не замутишь на VB6/
     
    Последнее редактирование: 28 фев 2021
  7. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Если ты про скорость в плане разработки софта, то да, современные среды и ЯП позволяют создавать приложения быстрее (в плане скорости разработки) и с большими возможностями типа кросплатформенности и т.п. Если в плане скорости работы кода, то тут не все так просто. Также, насколько мне известно, ни одна среда не обеспечивает такой тесной интеграции с COM/ActiveX как VB6. Насчет RAD'ности я тоже ничего не могу сказать т.к. не обладаю достаточными знаниями в области других сред разработки. К примеру в VB6 можно запустить ActiveX сервер, из любого другого EXE дернуть метод, поставить на паузу и писать код метода непосредственно в этот момент (когда EXE ожидает ответа). Насколько мне известно ни одна IDE/ЯП так не могут (могу ошибаться).

    Никто не заставляет тебя так делать. Использование инлайн асма в С/C++ - изврат? Ты приводишь мне асм и низкоуровневый кодинг как какой-то аргумент против VB6. Я тебе говорю что есть такая возможность и в VB6 и тут ты мне пишешь про лохов. В чем дело?

    Давай сначала разберемся чем ActiveX EXE не угодил? Написать я могу почти любой код на VB6.
     
  8. X-Shar

    X-Shar Active Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    354
    https://wasm.in/threads/mnogopotochnost-na-vb6.31758/

    Thetrik, крутой раздел, спасибо вам большое...)))

    Что-то не видел, начал читать с удовольствием, я не фанат бейсика, но прикольные там темы, мне понравилось, куча инфы, может мне даже пригодится...)))
     
    Thetrik и M0rg0t нравится это.
  9. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Ага, то-то там каждый "чих" огорожен критическими секциями. Не нужно тут дезинформации. Рантайм написан исключительно с поддержкой многопоточности. Как минимум OCX и DLL создаваемые в VB6 могут быть использованы из многопоточных хостов.
     
  10. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    в том то и дело, что нативные API по созданию потоков там не канают. Поэтому и "чихает". И спрашивается нафиг паровоз? Что на нём кроме окошек писать (гуев)? Мож малварь?
    Еще раз попрошу в подтверждение своих слов - дайте норм рабочий семпл обычного exe с поддержкой CreateThread, не говоря о уже о RtlCreateUserThread?
    Да, я согласен удобно и знать не надо систему, но всё же нафига? Чисто школьников учить у которых нет наработок например на чистом API на сях, делфи или прочего?
    ADD: ActiveX 96 года - давно анахронизм. Уж если делать нефиг - перейдите на .NET чтоль....
     
    Последнее редактирование: 28 фев 2021
  11. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Спасибо за отзыв. Есть еще несколько новых проектов, думаю опубликовать тут или не стоит, т.к. многим не по душе здесь это.

    И что? Я конкретно задал вопрос - чем не устраивает ActiveX EXE? Или ты (давай на "ты") один из тех кто сам не понимает зачем он хочет потоки, но не хочет ActiveX EXE?

    Я сделаю семпл с CreateThread, если ты создашь специальный топик и нормально сформулируешь задачу. Поток ради потока?

    Для того что так работает система, а именно COM, а именно STA апартамент. Второй момент это то что VB6 абстрагирует тебя от необходимости в синхронизации и изоляции межпоточных данных. Ок, не хочешь, не используй эту фичу. Можешь создавать потоки через CreateThread, как в C, но и ответственности у тебя будет как в C.

    Ага, то-то весь офис поголовно ActiveX сервера. В винде куча новых технологий основана на COM. Не нужно тут писать дезу.
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Да и весь дотнет основан на COM так то.
     
    Thetrik нравится это.
  13. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    Имхо, если бы аверы так рубили с плеча, как rmn и f13nd в этой ветке, то мир остался бы без метапрограммирования.
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    не обращайте внимания
     
    Ronin_ нравится это.
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    морфить код == ПАЛЕВО == нужно записать данные на страницу озу с пометкой на исполнение.
     
  16. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    UbIvItS, это было бы палево, если бы никому кроме морфов это было бы не нужно.
     
  17. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    я использовал морф для оптимазы алгоса по скорости. Но в большинстве случаев лучше использовать указатели на функи. для защиты от реверса морф тоже лишний == он гораздо больше делает ПАЛЕВА, чем пользы. тч я лично не знаю, где морф реально нужен в обычном софте.. те же нейронки можно делать на функо-указателях.