【发布时间】:2020-08-19 16:09:13
【问题描述】:
TL;DR
- 我的项目在运行时使用自定义脚本文件。
- 我的项目在 VS 中构建良好并在命令行上运行。
- 但是,在 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