CvCaptureFromFile(..)的源代码

时间:2013-02-07 06:53:45

标签: c++ c opencv video-capture

我想使用CvCaptureFromFile(..)函数的源代码,因为我不想在我的项目中使用OpenCV库函数。所以我按下F10,F11进入函数内部,然后我复制了我需要的东西并将它们转换成C代码。直到现在一切正常。

但是当我试图运行时,我在函数icvIntFFMPEG(void)

中得到链接错误

错误如下:

  

错误1 error LNK2019: unresolved external symbol "__declspec(dllimport) void * __stdcall GetProcAddress(struct HINSTANCE__ *,char const *)" (__imp_?GetProcAddress@@YGPAXPAUHINSTANCE__@@PBD@Z) referenced in function "void __cdecl icvInitFFMPEG(void)" (?icvInitFFMPEG@@YAXXZ)
  错误2 error LNK2019: unresolved external symbol "struct HINSTANCE__ * __stdcall LoadLibrary(char const *)" (?LoadLibrary@@YGPAUHINSTANCE__@@PBD@Z) referenced in function "void __cdecl icvInitFFMPEG(void)" (?icvInitFFMPEG@@YAXXZ)

我复制了源代码中的所有内容。知道我哪里错了吗?我该如何解决这个错误?

UPDATE :如果我将头文件(我在处理源代码的地方)包装在extern“C”中,就像这样 -

extern "C" {
  #include "defination.h"
 }

然后第一个错误消失了,loadLibrary的错误变为

  

error LNK2019: unresolved external symbol __imp__LoadLibrary@4 referenced in function _icvInitFFMPEG

2 个答案:

答案 0 :(得分:2)

OpenCv使用ffmpeg - 这是一个非常大的项目。 ffmpeg使用窗帘后面的一些其他工具。你可能想要使用ffmpeg,但从ffmpeg本身获取源代码是愚蠢的 - 你将花费数年时间摆弄代码 - 真的。

所以,决定一个视频输入库 - 无论是OpenCV,ffmpeg,Direct3D还是其他什么,并使用它。

不要抱怨“你不能使用外部库”的想法,因为你不能没有它们。开发这样一个库需要数年时间 - 我很确定你不想这样做。

答案 1 :(得分:1)

好吧,似乎你得到了对Kernel32.dll内部的LoadLibrary()/ GetProcAddress()函数的未解析调用。您使用的IDE /项目类型是什么?默认情况下应该链接Kernel32.lib,除非在某处指定了/ NODEFAULTLIB,至少就我记忆所知。您可以尝试将#pragma comment(lib, "kernel32.lib")添加到您复制代码的文件中,但如果没有关于您的设置的更多信息,则很难回答导致此问题的原因。