2

我有以下代码行。我想设置相对路径而不是硬编码路径,正如下面第二个参数中目前设置的那样 -

sysExecCmd("Unlock_Ecu.bat","","D:\\Program Files\\ToolPath");

应替换为:

sysExecCmd("Unlock_Ecu.bat","","...\\ToolPath");

如何在 Capl 的 sysExecCmd 函数中执行此操作?

4

2 回答 2

2

我通常这样做如下所示:

variables
{
  char absPath[256];   // Holds Abs Path for current CFG file
  // Relative Path for ToolPath folder
  char ToolPath[100]= "\\ToolPath\\";
}

on preStart
{
  /* Get Abs path of current config file */
  GetUserFilePath("", absPath, 256);
  Exec_Batch();
}

void Exec_Batch()
{
  /* Get Absolute Path for executing Bat file */
  char absToolPath[256];
  strncat(absToolPath, absPath, strlen(absPath));
  strncat(absToolPath, ToolPath, strlen(absToolPath) + strlen(ToolPath)); 

  write("Executing Batch File");

  sysExecCmd("Unlock_Ecu.bat","",absToolPath);

  write("Finished execution of Batch File");
}
于 2016-09-12T07:28:04.943 回答
1

sysExecCmd文档(强调我的):

为了避免CAPL 代码中的绝对路径并独立于执行平台,请执行以下操作:

将要启动的应用程序添加到 CANoe 选项对话框中的用户文件。在应用程序调用时,可以使用 CAPL 函数解析绝对路径GetUserFilePath

例子:

char absPath[256];
GetUserFilePath("Unlock_Ecu.bat", absPath, 256);
SysExecCmd(absPath, "");
于 2016-09-01T13:51:50.667 回答