Что нового

Как присвоить свойству объекта (программно)

Microteam

Осваивающий
Сообщения
74
Репутация
34
Здарова, пацаны! В общем, дело такое:
Надо присвоить свойству объекта значение, причем не просто так, "захардкодить", а чтобы название свойства генерировалось на ходу.
Пробовал Assign(), но он не работает.
Код:
$prop_name = 'myprop'
$obj = ObjCreate('...')

Assign('obj.' & $prop_name, 'myvalue')
Assign('$obj.' & $prop_name, 'myvalue')
; Не работает не так, не эдак.


Получать значения я понял как (через Execute()), а вот ставить...
Чо, есть варианты, пацаны?
 
Автор
Microteam

Microteam

Осваивающий
Сообщения
74
Репутация
34
Пацаны, нашёл неплохое решение. Короче, есть такая библиотека (UDF) - AutoItObject. Я отсюда вытащил:
https://github.com/AutoItMicro/AutoItObject

Дальше, там есть такая неплохая функция _AutoItObject_AddProperty()
Вот, она самым последним параметром, может устанавливать данные... К примеру:
Код:
$obj = _AutoitObject_Create()
$fieldname = 'test'
$fieldvalue = 'lol!'

; Ставим значение
_AutoitObject_AddProperty($obj, $fieldname, $ELSCOPE_PUBLIC, $fieldvalue)

; Получаем значение
$val = Execute('$obj.' & $fieldname)

MsgBox(0, $fieldname, $fieldvalue)


Ещё там есть врапперы, можно если что оборачивать Application.Excel и т.д. В общем, грамотная библиотека.
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
464
можно так
Код:
$oObject = ObjCreate('scripting.dictionary')
$prop_name = 'Add'
Execute("$oObject." & $prop_name & "(123, 44444)")
ConsoleWrite($oObject.item(123) & @CRLF)
 

InnI

AutoIT Гуру
Сообщения
4 483
Репутация
1 216
inververs
А если дальше сделать так, то не работает
Код:
$prop_name = "item"
Execute("$oObject." & $prop_name & "(123) = 55555")
ConsoleWrite($oObject.item(123) & @CRLF)
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
464
InnI запилите в баг трекер
 

InnI

AutoIT Гуру
Сообщения
4 483
Репутация
1 216
inververs
запилите в баг трекер
А может это недокументированная невозможность? Т.е. это не ошибка, но об этом нигде не сказано :scratch:
 
Верх