VC2008 Express +OpenCV2.0使用CameraDS类的调试经历

原文:

http://www.opencv.org.cn/forum.php?mod=viewthread&tid=10176




    最近在Microsoft Visual C++ 2008 Express 和 OpenCV 2.0下使用版主Shiqi Yu 开发的CCameraDS类,在调试过程中出现了很多错误。参照他的贴子(下称文献1)
<!-- m --><a class="postlink" href="http://www.opencv.org.cn/index.php?title=%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F&oldid=9519">http://www.opencv.org.cn/index.php?titl ... oldid=9519</a><!-- m -->
     同时也参照下面博客中的内容(下称文献2)解决了其中的一些问题。
<!-- m --><a class="postlink" href="http://blog.csdn.net/chenyusiyuan/archive/2009/10/08/4643313.aspx">http://blog.csdn.net/chenyusiyuan/archi ... 43313.aspx</a><!-- m -->
     但又遇到一些别的问题,经查找多方资料终于调试成功。现在汇总如下,希望对后来者有所帮助,同时也感谢文献作者。

1、        按照文献1所说的“在vc++2005开发环境下的使用说明”完成步骤1-3
2、        编译报错,说找不到atlbase.h,于是安装VC++6.0,并添加相应的库,下图所示为include库。需要指出的是,添加库的顺序尽量按图中顺序来,否则可能出现一些错误,这个在文献2中有阐述。


3、接着编译,又报如下错误
atlbase.h(770) : error C2065: 'T' : undeclared identifier
atlbase.h(818) : error C2061: syntax error : identifier 'T'   
解决办法是,在出现错误的代码前面增加以下语句
template <class T>

还有一个错误是关于InlineIsEqualGUID函数的,修改方法如下
修改 InlineIsEqualGUID() 为::ATL::InlineIsEqualGUID()


4、接着编译,又报如下错误
pen.obj : error LNK2019: unresolved external symbol __RTC_CheckEsp referenced in function &quot;void __stdcall `vector constructor iterator'(void *,unsigned int,int,void * (__thiscall*)(void *))&quot; (??_H@YGXPAXIHP6EPAX0@Z@Z)
CameraDS.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Open.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
CameraDS.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Open.obj : error LNK2001: unresolved external symbol __RTC_InitBase
CameraDS.obj : error LNK2001: unresolved external symbol __RTC_InitBase
解决方法是,在 Project -> Properties -> Configuration Properties ->C/C++ -> code generation中将Basic Runtime Checks 设置成default; Buffer Security Checks设置成 (/GS-)

5、接着编译,又报如下错误
unresolved external symbol &quot;public: void __thiscall CCameraDS::CloseCamera(void)&quot;
由于在第1步中只是将camerads.h,.cpp复制到工程中,并没有真正添加进来;需要在Solution Explorer 中 在camerads.h,.cpp文件处点右键,选择Include in Project,把它们真正包含到项目中来

6. 接着编译,又报如下错误
error LNK2019: unresolved external symbol ___iob_func referenced in function _main
error LNK2019: unresolved external symbol ___CxxFrameHandler3 referenced in function __ehhandler$_main
error LNK2001: unresolved external symbol ___CxxFrameHandler3
CameraDS.obj : error LNK2001: unresolved external symbol _IID_ISampleGrabber
CameraDS.obj : error LNK2001: unresolved external symbol _CLSID_NullRenderer
CameraDS.obj : error LNK2001: unresolved external symbol _CLSID_SampleGrabber
CameraDS.obj : error LNK2001: unresolved external symbol _LOOK_UPSTREAM_ONLY
CameraDS.obj : error LNK2001: unresolved external symbol _CLSID_CaptureGraphBuilder2
CameraDS.obj : error LNK2001: unresolved external symbol _IID_ICaptureGraphBuilder2

解决办法是,把vc98\lib也放到最下面。
  

这时编译、链接均成功,找个摄像头一试,可以实现相应功能。


不过,在链接时出现一个警告如下
LINK : warning LNK4044: unrecognized option '/wd4430'; ignored
这是按文献2的提示操作的步骤
“在Project -> Properties -> Configuration Properties -> Linker -> Command Line的Additional Options 中添加/wd4430: 
此时,把这一步删去,发现编译、链接均成功,这个警告也消失。

你可能感兴趣的:(express,调试,VC2008,OpenCV2.0,CameraDS类)