Что нового

Не отрабатывает Eval()

w3d

Новичок
Сообщения
84
Репутация
3
Есть СОМ-объект $lic

Код:
Global $lic = ObjCreate("NN.DD")
MsgBox(0, 'test',$lic.FullName)
$sTmp = "$lic.FullName"
MsgBox(0, 'test',Eval($sTmp))


первая строка выдает правильное значение, последняя - пустое.
что я делаю не так?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: [Математика] Не отрабатывает Eval()

попробуй убрать знак $
Код:
$sTmp = "lic.FullName"
 
Автор
W

w3d

Новичок
Сообщения
84
Репутация
3
Re: [Математика] Не отрабатывает Eval()

Увы, результат аналогичен :(
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: [Математика] Не отрабатывает Eval()

возможно(!!!), Eval() работает с методами объектов не как с обычными переменными, ведь те все таки функции а не просто переменные. попробуй, тогда, сначала присвоить значение $lic.FullName переменной, а после подставить его под Eval. примерно так
Код:
Global $lic = ObjCreate("NN.DD")
MsgBox(0, 'test',$lic.FullName)
$sTmp = $lic.FullName
$sTmp2 = 'sTmp'
MsgBox(0, 'test',Eval($sTmp2))
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: [Математика] Не отрабатывает Eval()

А при чём тут математика?
 
Автор
W

w3d

Новичок
Сообщения
84
Репутация
3
Re: [Математика] Не отрабатывает Eval()

kaster сказал(а):
возможно(!!!), Eval() работает с методами объектов не как с обычными переменными, ведь те все таки функции а не просто переменные. попробуй, тогда, сначала присвоить значение $lic.FullName переменной, а после подставить его под Eval.

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
w3d [?]
Смысл был именно в том чтобы на ходу формировать имя свойства.
Т.е чтобы не проверять поддерживается ли оно? Для этого есть кстати один метод, а вместо Eval можно использовать Execute:

Код:
#include <Array.au3>

$oObj = ObjCreate("Scripting.FileSystemObject")

$aObj_Members = _ObjGetMemebers($oObj, 1)

If IsArray($aObj_Members) Then
	_ArrayDisplay($aObj_Members)

	;16 should be .GetTempName
	ConsoleWrite(Execute("$oObj." & $aObj_Members[16]) & @CRLF)
EndIf

Func _ObjGetMemebers($oObj, $iRetType=0)
	If Not IsObj($oObj) Then Return SetError(1, 0, 0)
	
	Local $oTLA = ObjCreate("TLI.TLIApplication")
	
	Local $objInterface = $oTLA.InterfaceInfoFromObject($oObj)
	Local $oMembers = $objInterface.Members
	Local $sRet_Members = ""
	
	For $iMember In $oMembers
		$sRet_Members &= $iMember.Name & @CRLF
	Next
	
	$sRet_Members = StringStripWS($sRet_Members, 3)
	
	If $iRetType = 1 Then Return StringSplit($sRet_Members, @CRLF, 1)
	Return $sRet_Members
EndFunc
 
Автор
W

w3d

Новичок
Сообщения
84
Репутация
3
CreatoR сказал(а):
w3d [?]
Смысл был именно в том чтобы на ходу формировать имя свойства.
Т.е чтобы не проверять поддерживается ли оно?
Не совсем.
Перечень свойств задан и я их знаю.
В ини-файле записаны несколько из свойств, вот надо получить их значения.
Чтоб не формировать массив на все свойства а потом отбирать нужные, я и хотел подставлять сразу нужные свойства... но видно не судьба.
В общем, получилась такая кривота:
Код:
; цикл по полям из ини-файла
For $i = 1 To $sValue[0][0]
; цикл по названиям полей
For $iCount1 = 0 To 27
	If $sValue[$i][0] = $aFields [$iCount1][0] Then 
		ControlSetText($sSec[1],'',$sValue[$i][1],$aLicFields [$iCount1])
	EndIf
Next
Next
 
Автор
W

w3d

Новичок
Сообщения
84
Репутация
3
CreatoR сказал(а):
w3d [?]
но видно не судьба
А Execute не подходит?
Великолепно подошло! :IL_AutoIt_1:
В результате сократилось до:
Код:
; цикл по полям из ини-файла
For $i = 1 To $sValue[0][0]
 $sTmp = "$lic." & $sValue[$i][0]
 ControlSetText($sSec[1],'',$sValue[$i][1],Execute($sTmp))
Next
 
Верх