gpt4 book ai didi

c - 输入相同但输入方式不同结果不同

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:25 24 4
gpt4 key购买 nike

我有一个来自 opencv dll 的外部函数 cvCreateFileCapture,它应该将路径作为输入并返回一个结构。

CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)

我出于测试目的创建了一个 vs2010 项目,从那里我使用有效的文件路径调用此函数并获取我应该返回的结构。

当我从另一个程序(我使用的是 labVIEW)调用这个函数时,我使用相同的输入跳转到相同的函数,但它返回 0。

有谁知道为什么它以一种方式工作而不以另一种方式工作?

C 调用是 CvCapture* p = cvCreateFileCapture("C:/Users/****/Downloads/Disturbedloc.avi");

labview 调用如下所示:

最佳答案

加载时间调试

如果库调用在一个环境中有效但在另一个环境中无效,则说明环境存在差异。主要有两种方法:

  1. 使用depends.exe确保 opencv 具有正确的链接。也许 Visual Studio 正在检查 opencv 以查找其他库 ( like FFMPEG or GStreamer ) 和 adding extra loader instructions在启动时获取这些二进制文件。另一方面,LabVIEW 将执行 pure dynamic load。 ,并且如果库没有正确公布其依赖项,则不会加载这些库,您将获得一个 NULL 指针。
  2. 在您的 VI 首次调用 opencv 之前将 Visual Studio 连接到 LabVIEW,然后观看 Modules window查看支持库是否驻留在内存中。与您的工作 Visual Studio 程序进行比较会显示是否有任何遗漏。

强制加载缺失的库

运行时链接在 opencv 中不起作用是他们项目中的一个错误。你应该向他们报告。

您有两个解决方法:

  1. 修复错误,自己构建 opencv,然后将其与您的应用程序一起重新分发。
  2. 调用dummy entry points在每个依赖项中提示 LabVIEW 将它们带入过程。然后开始调用 opencv

一旦开始工作

由于您的 opencv dll 返回一个指向结构的指针,您有两个选择:

  1. 在另一个 C/C++ 库中包装和调整 opencv 库,以便输入/输出是更简单的数据类型,例如数字。
  2. 使用集群和一些特定的调用库函数节点配置,以便 LabVIEW 可以理解 opencv 类型的内存布局。 NI 有一些很好的文档描述了 LabVIEW 如何与外部库接口(interface),但从这里开始:Calling C/C++ DLLs from LabVIEW .

关于c - 输入相同但输入方式不同结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35158725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com