我有一个来自opencv dll的外部函数cvCreateFileCapture,它应该将路径作为输入并返回一个结构。
CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)
我创建了一个用于测试目的的vs2010项目,我使用有效的文件路径调用此函数,并获得我应该返回的结构。
当我从另一个程序调用此函数时(我正在使用labVIEW),我使用相同的输入跳转到相同的函数但返回0。
有没有人知道它为什么单向工作而不是另一种工作?
C来电是CvCapture* p = cvCreateFileCapture("C:/Users/goetz/Downloads/Disturbedloc.avi");
labview调用如下所示:
答案 0 :(得分:4)
如果图书馆通话在一个环境中工作而在另一个环境中工作,那么环境就会有所不同。主要有两种方法:
opencv
具有正确的链接。也许Visual Studio正在检查opencv
其他库(like FFMPEG or GStreamer)和adding extra loader instructions是否在启动时获取这些二进制文件。另一方面,LabVIEW将执行pure dynamic load,如果库没有正确地宣传其依赖项,那么这些库将无法加载,您将获得{Modules window 1}}指针。NULL
之前将Visual Studio连接到LabVIEW,然后观察dummy entry points以查看支持库是否驻留在内存中。与您正在运行的Visual Studio程序进行比较,将显示是否缺少任何内容。运行时链接在opencv
中不起作用是他们项目中的错误。你应该向他们报告。
您有两种解决方法:
opencv
,然后将其与应用程序一起重新分发。opencv
。由于您的opencv
dll返回指向结构的指针,因此您有两个选项:
opencv
库包装并调整到另一个C / C ++库中,以便输入/输出是更简单的数据类型,如数字。opencv
类型的内存布局。 NI有一些很好的文档描述了LabVIEW如何与外部库连接,但从这里开始:the Apple Developer site。答案 1 :(得分:1)