基本上,我要做的是从批处理文件执行DXL。该批处理文件从Java代码获取了一些路径,然后将该路径发送到DXL。
我确定DXL中的路径(它实际上是一个普通的字符串),现在我想使用这些路径字符串来创建一些#include。
所以,如果我有一个变量:
string a = "MY/PATH/IS/OK"
我想使用该 a 进行包含:
#include <a/whatever.inc>
有人知道怎么做吗?
此外... 我要执行的include与必须执行上述操作的DXL脚本位于同一文件夹中...我可以使用类似的东西
#include <.\the_include_file.inc>
还是类似的东西?
答案 0 :(得分:1)
在DXL中,先评估#include
命令,然后再评估其他DXL命令(基本上,预处理器仅获取引用文件的内容,并将包含#include
的行替换为以下内容:剧本。
因此,像
string a = ..read_some_value_from_a_file..
#include <{a}/whatever.inc>
将不起作用(很好,仅在eval_语句中,但这太复杂了)
我认为解决问题的最简单方法是在DOORS启动之前先调用Java代码,然后使用-addins
参数调用doors.exe,有关详细信息,请参见https://www-01.ibm.com/support/docview.wss?uid=swg21324525和https://www-01.ibm.com/support/docview.wss?uid=swg21421641详细信息和替代方案。另外,在https://www.ibm.com/developerworks/community/forums/html/topic?id=d43c725f-bd74-4c1a-88d5-51fdf8eed0b9上查看Louie Landale的摘要,其中还提到了可以使用的环境变量。
更新: 前段时间,我们对dxl文件的搜索顺序进行了一些测试,这是一些脚本摘录。
string sCur = currentDirectory() ; buf += sCur ; buf += ";"
string sInst = (getenv "DOORSHOME") "\\lib\\dxl"; buf += sInst ; buf += ";"
string sAddinsCmd = (getenv "DOORSADDINS") ; buf += sAddinsCmd ; buf += ";"
string sAddins = (getenv "ADDINS") ; if (null sAddinsCmd) buf += sAddins; buf += ";"
string sProjectAddinsCmd = (getenv "DOORSPROJECTADDINS") ; buf += sProjectAddinsCmd; buf += ";"
string sProjectAddins = (getenv "PROJECTADDINS") ; if (null sProjectAddinsCmd) buf += sProjectAddins ; buf += ";"
因此,如果您使用命令启动DOORS
C:\> D:
D:\> cd \temp
D:\temp> "c:\Program Files\IBM\DOORS\9.6\bin\doors.exe" -addins E:\scripts
,并且您有一个包含相对路径的include语句,即#include <src/lib/hello.inc>
,DOORS首先尝试在D:\ temp,然后在c:\ Program Files \ IBM ... \ lib \中查找目录src。 dxl,然后输入E:\ scripts。
如果您的include语句具有绝对路径,即#include <c:/myscripts/lib/dxl/goodmorning.inc>
或#include <\\\\myservername\\myshare\\dxllib\\helloibm.inc>
,它将在这些位置准确显示。