我想在DXL中编写一个循环,从一个名为“req”的Object链接到的每个Object中读取一些东西。
天真的解决方案,省略了req的初始化,将是这样的:
Object req
Object parent
Link baselink
for baseLink in req -> "*" do{
parent = target(baseLink)
...
}
除非存在这些“父”对象的所有模块已经打开,否则这不起作用。对于仍未打开的任何内容,“父”变量只接收Null值。
鉴于这种情况,我想要一种以编程方式打开它们的方法。
DXL参考手册提供的解决方案仅适用于传入链接(来自“子”对象):
ModName_ srcModRef
for srcModRef in o<-"*" do
read(fullName(srcModRef), false)
不幸的是,我无法找到传出链接的解决方案。用“ - &gt;”替换“&lt; - ”在上面的例子中失败。我在手册和网页上搜索过。
我想避免打开整个链接模块指向的所有链接,因为这涉及其他来源。
有人知道如何以编程方式打开由对象链接的所有模块吗? 我怀疑有没有办法在不打开它所在的模块的情况下访问对象,但这也可以解决我的问题。
答案 0 :(得分:2)
以下是您的解决方案:
Object req
ModName_ parentModName
Module parentMod
Object parent
Link baselink
for baseLink in req -> "*" do{
parentModName = target(baseLink)
parentMod = read(fullName(parentModName), false)
parent = target(baseLink)
...
close parentMod
}
即使模块未打开,您也可以获取ModName_句柄然后打开它。然后,您可以获取目标对象引用。完成后,不要忘记关闭链接的模块以释放资源。
希望这有帮助!