Does the callFunc() feature work in V7.6? Trying to use it based on the sdk and only getting an error that Interface not a member of BrightScript Component (runtime error &hf3). Setting it up as follows.
dialoginterface.xml
<?xml version = "1.0" encoding = "utf-8" ?>
<component name = "mydialog" extends = "Scene" >
<interface>
<function name = "generalDialog" />
</interface>
<script type="text/brightscript" uri="pkg:/components/dialogs/Dialogs.brs" />
<script type = "text/brightscript" />
</component>
setinfo.brs
function setinfo()
dialogtitle="TITLE TEST"
dialogmessage = "MESSAGE TEST"
params = {title:dialogtitle, message:dialogmessage}
m.mydialog.callFunc("generaldialog", params)
end function
dialogs.brs
function generalDialog(params as Object) as Object
?"in generalDialog"
title= m.top.findNode(title)
message=m.top.findNode(message)
m.background = m.top.findNode("Background")
example = m.top.findNode("instructLabel")
examplerect = example.boundingRect()
centerx = (1280 - examplerect.width) / 2
centery = (720 - examplerect.height) / 2
example.translation = [ centerx, centery ]
m.top.setFocus(true)
di = CreateObject ("roDeviceInfo")
serial=di.GetDeviceUniqueId()
dialog = createObject("roSGNode", "Dialog")
dialog.title = title
dialog.optionsDialog = true
dialog.message = message
m.top.dialog = dialog
end function
Maybe the function name is case sensitive when using callFunc? you are calling “generaldialog” but the function is defined as “generalDialog”. Just a guess.
also, what’s up with this code? you aren’t using your params and the findNode call expects a string.
title= m.top.findNode(title)
message=m.top.findNode(message)
“tim_beynart” wrote:
Maybe the function name is case sensitive when using callFunc? you are calling “generaldialog” but the function is defined as “generalDialog”. Just a guess.
You maybe correct. I’ll try and post whether it made a difference. Thanks for the catch.
Update: matching the case didn’t fix it. Still get Interface not a member of BrightScript Component (runtime error &hf3).
Thanks anyway
FWIW, I am using callFunc extensively without issue. The biggest mistake I keep making is defining a function then calling it with dot notation like I am using a normal language, ha ha.
You should comment out all the code in your function except a print statement, then test. posting the actual telnet log would help.
I only use it on components that extend Group and Task, not sure if functions are allowed on a Scene.
I have pretty much cut it down to nothing and getting error “Member function not found in BrightScript Component or interface.”
mysetup.brs
function mysetup()
m.mytestTask=CreateObject("RoSGNode", "mytest")
m.mytestTask.callFunc("functiontest")
end function
functiontest.xml
<?xml version="1.0" encoding="utf-8" ?>
<!--********** Copyright 2016 Roku Corp. All Rights Reserved. **********-->
<component name = "mytest" extends = "Task" >
<interface>
<field id = "content" type = "node" />
<function name = "functiontest" />
</interface>
<script type="text/brightscript" uri="pkg:/components/functiontest.brs" />
<script type = "text/brightscript" />
</component>
functiontest.brs
function functiontest()
?"I AM HERE"
end function
All of the above files are located pkg:/components directory. I understand the error but not sure why it’s not seeing the function.
weird.
I looked through my code and I only use functions in components that extend Group. Perhaps SG doesn’t allow functions on Tasks?
I just tried to add a function interface to a Task, and it doesn’t work. I guess the Task node type doesn’t support this.
=================================================================
Warning calling function in myTask
no function interface specified for test