【问题标题】:Using custom script files with C++ project in Visual Studio 2019在 Visual Studio 2019 中将自定义脚本文件与 C++ 项目一起使用
【发布时间】:2020-08-19 16:09:13
【问题描述】:

TL;DR

  1. 我的项目在运行时使用自定义脚本文件。
  2. 我的项目在 VS 中构建良好并在命令行上运行。
  3. 但是,在 VS 中运行时会引发错误,提示该文件不存在。

详细信息

我的 c++ 项目使用自定义脚本文件在运行时应用一些设置:

  • 这些是类似 javascript 但不是真正的 javascript
  • 在编译文件中没有这些设置意味着可以在不重新编译的情况下更改它们 一切正常,脚本是在构建后事件中使用 xcopy 复制的。

在 VS2019 中运行时,它似乎无法找到脚本文件。 发出不透明的库特定错误:A GenApi error has occurred

但是当运行生成的 .exe 从 cmd 一切正常时,使用脚本没有问题。 如果从输出目录中删除脚本文件并再次运行 .exe,我会得到相同的 A GenApi error has occurred

我试过了:

  • 在发布和调试中运行。
  • 在构建中包含和排除文件。

我不想调试脚本,我只需要在启动期间使用它,这样我就可以调试 C++ 中的程序的其余部分.....

示例代码

Main.cpp

#include <iostream>
#include <EGrabber.h>

void configure() {
    Euresys::EGenTL gentl;
    Euresys::EGrabber<> grabber(gentl);
    grabber.runScript("config.js");
}

int main() {
    try {
        configure();
    } catch (const std::exception &e) {
        std::cout << "error: " << e.what() << std::endl;
    }
}

config.js

var grabber = grabbers[0];
var FPS = 150;
// camera configuration
grabber.RemotePort.set("TriggerMode", "On");
grabber.RemotePort.set("TriggerSource", "CXPin");
grabber.RemotePort.set("ExposureMode", "TriggerWidth");
// frame grabber configuration
grabber.DevicePort.set("CameraControlMethod", "RG");
grabber.DevicePort.set("CycleTriggerSource", "Immediate");
grabber.DevicePort.set("CycleMinimumPeriod", 1e6 / FPS);

更多信息:

script documentation

【问题讨论】:

  • 如前所述,我已经尝试过了,它似乎没有任何区别。问题不是从构建中排除,而是更多地包括在运行时
  • 从 VS 运行和从命令行运行时不同的当前工作目录。从 VS 运行时,当前工作目录是项目目录而不是输出目录。
  • @john 看来你是对的。我已经添加了脚本的完整路径,它可以工作了!

标签: c++ visual-studio visual-studio-2019


【解决方案1】:

基于@john 的评论:

VS 运行和从 命令行 运行时有一个不同的当前工作目录

当从 VS 运行时,当前工作目录项目目录 而不是输出目录。

脚本位于project-dir\src 而非直接项目目录中。

将脚本上移到项目目录解决了所有问题。


可行的替代解决方案:

  1. 使用完整路径:C:\\full\\path\\config.js

(应用程序启动路径可以从argv[0]中提取)

  1. 更改VS中的调试工作目录:
    • 项目 -> 属性 -> 配置属性 -> 调试 -> 工作目录
    • 输入输出路径,例如:$(SolutionDir)bin$(Platform)$(Configuration)\

【讨论】:

  • 很高兴您得到了解决方案,感谢您的分享,如果您将它们标记为答案,我将不胜感激,这将对其他社区有益。
猜你喜欢
  • 1970-01-01
  • 2020-01-19
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多