• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Фокус-покус - Лотус-Нотус скрип-т

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
делай раз - создаем либу (test.lib) с декларой:
Код:
Class TestObj
Private testList List As String
Property Set ListStr(xKey) As String
testList(xKey)=ListStr
End Property
Property Get FullList As Variant
FullList=testList
End Property
End Class
делай два - агент:
Код:
Option Public
Option Declare
Use "test.lib"
Sub Initialize
Dim test As New TestObj()
test.ListStr("1")="One"
test.ListStr("2")="Two"
test.ListStr("3")="Three"
Forall t In test.FullList 
Print t
End Forall
End Sub
делай три - пущаем агент
получаем... - несовпадение типов

каментим Use...
суваем в деклару агента класс, из библы
сохраняем-пущаем - всё проходит!

оттакавот опа
Variant никак не кастится, ежели лист тяним из либы
 
N

nvyush

Если в агенте написать так:
Код:
Sub Initialize
Dim test As New TestObj()
test.ListStr("1")="One"
test.ListStr("2")="Two"
test.ListStr("3")="Three"
Dim lst As Variant
lst = test.FullList 
Forall t In lst
Print t
End Forall
End Sub
то с либой работает. Прикольный глюк.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
lmike
думаю дело тут таки в ForAll
я тоже ни раз замечал что переменный в нем конвертятся в "хитрый вариант"
просто пример:
имеем строковый массив a(0..10)
Код:
forall b in a
call TestSub(B) ' - если в этой процедуре указать на прийом жестко строковую переменную, то уже в процессе компиляции мы получаем ошибку

и писать нам приходится вот так:
Код:
call TestSub( (cstr(B) )
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
я не против хитрой конвертации, я против зависимости от положения звёзд.../кода :lol:
forall удобен как тип цикла
с явным приведением - я сталкивался, но - це другой случАй :)
 
H

hosm

нда, вот если в стартовом примере поменять принт на
Print t & "1"
то выведет 3 раза 1 :lol:

а если поизвращаться, то еще и так работает:
Код:
Forall t In test.FullList 
Print test.FullList(Listtag(t))
End Forall
(*прошу не бить ногами за такой изврат*)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
подобный фокус получим и с бриджом LS2J
ежели в классе обратимся к полям класса java (public final int myConst=1;)
то, в случае вынесения LS рапера в библиотеку, поимеем невозможность получения Java Field
а реализация класса в агенте (по месту примения) такой ошибки не даст
для желающих поиграться - nsftools, LS2J экзампелы (прогрессбар)...
выносим класс агента в библиотеку - получаем ошибку
 
K

Kee_Keekkenen

а по-моему это нормально, раз кодер "что угодно" пихает в вариант, значит в месте использования этого "чего угодно" он знает, что "оно" есть, и использует приведение к нужному типу..

и что должна выводить такая конструкция ?
Код:
Forall t In lst
Print t
End Forall

тег приведенный к строке или значение элемента тега ?

лучшим вариантом в работе со списками я считаю создание сначала некоторого типа, а затем списка этого типа, тогда вообще никаких проблем нет..

Код:
Type ABuser
fio As String
db As String
End Type

Dim usersAB List As ABuser

If Iselement ( usersAB( lname)) Then
usersAB( lname).fio = usersAB( lname).fio & DELIM & altName 
usersAB( lname).db = usersAB( lname).db & DELIM & server & DELIMDB & dbpath
Else
usersAB( lname).fio = altName
usersAB( lname).db = server & DELIMDB & dbpath
End If

forall note in usersAB	
print note.fio, note.db
endforall
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
а Вы попробуйте...
или невнимательно прочитали? :(
там именно - низя привести ни к какому типу!
только вокэраунд как у nvy

это не рабочий код - это демонстрация и от того что лежит в листе не зависит
именно получение листа - как референса (а иначе придется итерировать с копированием) важно в этом примере
 
K

Kee_Keekkenen

да, понял что там написано.. список в явном виде по ссылке не передается..
с другой стороны зачем его пихать в класс, если его обратно нужно вернуть (хотя, конечно, всякое бывает) ?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
ну пихают в класс - чтобы клас его инициализировал и работал с ним..., а результат обработки - как массив
и глобальным его делать не хоца
разве не приходилось из ф-ций возвращать массивы? :(
 
K

Kee_Keekkenen

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
нет - задача не иная :(
повторюсь - это концепт
хэши - суть массивы, то что его в LS обозвали List, не влияет на содержимое
допустим нужен агрегатор по ключу (суммы, счетчики, контектация строк...) - хэш самое оно
а затем сортануть ключи (в др. массиве), и вывести резалт
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!