来源自::http://blog.csdn.net/li_007/archive/2007/06/29/1671563.aspx
今天从http://www.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F#.E4.BE.8B.E7.A8.8B下载于世琪老师的Directshow类,用来检测自己机子上的USB摄像头(微点公司MVCII-1M)到能否连上。
照着教程,一步一步来,却有如下编译错误:
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面)
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: 语法错误: 缺少“;”(在标识符“Buffer”的前面)
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
令我很是不解。
最后在网上查找一下,发现是包含目录顺序的关系:
在包含于老师的DirectShow/Inlude时,放在了:
$(VCInstallDir)PlatformSDK\include和$(FrameworkSDKDir)include
两个目录上面。
调整“
C:\OpenCV2.0\vs2005\DirectShow\Include”到包含目录的最底下一行,再编译,还是没通过。
再查,发现自己画蛇添足。
在:项目——xx工程属性——C/C++——常规——附加包含目录里也加上了
DirectShow/Inlude。
当然,在linker里的也加上了相应的库。
将这两项都删掉。
再编译,顺利通过。
回头再看于老师的使用说明:
在vc++2005开发环境下的使用说明:
// 1.将CameraDS.h CameraDS.cpp复制到你的项目中
// 2.将DirectShow复制到你的opencv根目录下,菜单 工具->选项->项目和解决方案->vc++目录,把..(你的opencv安装目录)/DirectShow/Include添加到
// “引用文件”中
$(VCInstallDir)PlatformSDK\include和$(FrameworkSDKDir)include下面任意位置
// 3.菜单 工具->选项->项目和解决方案->vc++目录,把..(你的opencv安装目录)/DirectShow/Lib添加到“库文件”下面。也可参考使用说明3。
怪自己不细心啊。
===================
遗憾的是,这次检测结果证明,还是不能调用微视公司的这个摄像头。——看来得想办法找到该摄像头的DirectShow驱动了。