按照微软官网上的一个文章有几个错误没有编译成功,后来又找一个文章CSDN空间的wushibin的专栏,结合在一起就可以编译成功了。现记录如下:
(以下内容是官网介绍)应用程序的编译:
现在我们已经将USB摄像头的驱动加好了。接下来让我们用应用程序来测试这个驱动。我们可以在WinCE的共享资源(例如PRIVATE目录)中找到一些DirectShow摄像头的示例应用程序。摄像头应用程序的源代码可以在以下目录中找到:
WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\CAMERA\CAMERAAPP
为编译生成应用程序的可执行文件,进行以下几步工作:
• 从workspace的Build菜单中选择"Open release Directory in Build Window"
• 将路径改变到WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\COMMON\LIBS
• 输入命令 ‘build -c’.
• 当这些路径中的编译过程结束后,将路径改变至 WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\CAMERA
• 输入命令 ‘build -c’. 编译结束后会有很多错误,先执行第一步解决方法:
括号中的问题本人未出现,但记录下来。(首先执行 build 命令。如果是第一次编译的话它可能会产生这样一个错误:
The error msg was ... don't know how to make ....captureframework.lib.
And so I tried to build the ...dshow/camera/framework/default directory in
order to create the errored captureframework.lib file. And then another error
msg was happened. 'cannot open program database
'e:/wince600/osdesign/..../captureframework.pdb'. Of source, there was no
such file at the path.
你需要的只是建立一个那样的目录。
再次执行 build 命令 , 它会产生这样的错误!
don't know how to build STREEUTILS.LIB
解决方法 :
把 E:/WINCE600/PUBLIC/OSTEST/OAK/LIB/ARMV4I/RETAIL 下面的 STREEUTILS.LIB 复制到E:/WINCE600/OSDesigns/OSAs6410Guide/OSAs6410Guide/Wince600/SMDK6410_ARMV4I/OAK/lib/ARMV4I/retail文件夹下面。)括号中的错误本人未出现,记录下来。
本人出现的问题如下:
error C2039: 'CoDisconnectObject' : is not a member of '`global namespace''
error C2873: 'CoDisconnectObject' : symbol cannot be used in a using-declaration
………………………..
这个错误的原因是:在 wince600/others/atl8/include/atlcore.h 文件中定义了这样的一段:
#if !defined(_WIN32_WCE) || (!defined(_ATL_STATIC_LIB_IMPL) && !defined(_ATL_DLL_IMPL) && defined(_CE_DCOM))
using ::CoDisconnectObject;
using ::CoInitialize;
using ::CoRevokeClassObject;
using ::CoRegisterClassObject;
using ::CoReleaseMarshalData;
using ::CoMarshalInterface;
using ::CoUnmarshalInterface;
using ::OleSaveToStream;
using ::OleLoadFromStream;
#endif // !defined(_WIN32_WCE) || (!defined(_ATL_STATIC_LIB_IMPL) && !defined(_ATL_DLL_IMPL) && defined(_CE_DCOM)
定义这个是因为我们的 CE 支持一些功能。 见里面的一句话: http://www.tech-archive.net/Archive/WindowsCE/microsoft.public.windowsce.embedded.vc/2008-03/msg00042.html
Looking at the ATL file you're hitting errors, those fcns are only brought
in when this #ifdef is set.
#if !defined(_WIN32_WCE) || (!defined(_ATL_STATIC_LIB_IMPL) &&
!defined(_ATL_DLL_IMPL) && defined(_CE_DCOM))
--
We have this ifdef because those fcns are supported on CE devices that
support the full cross-proc COM. So looks like you have _WIN32_WCE defined
to get the fcns, but didn't build with full DCOM to get the actual fcn
definitions?
解决这个问题的方法:
查找 _CE_DCOM 宏的定义, 并把它全部注释掉。
它的定义在 WINCE600/OTHERS/ATL8/INCLUDE/ATLDEFACE.H 第 53 行 和 78 行。
• 编译将在这些路径中进行, 不过最后会有"kato.lib"不可用的错误。• 现在转移路径到WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\CAMERA\CAMERAAPP\
• 输入命令 ‘build -c’
• 应用程序二进制文件"CameraDshowApp.exe"将生成于OSDesign的Release目录下。
下载并执行:
在编译完带有usbcam.dll和CameraDshowApp.exe的OS镜像后我们就可以把此镜像下载到开发板里了。当下载结束并启动之后,将USB摄像头连结到REGULUS开发板的USB Host port上。
当程序连结好设备之后,我们就可以运行我们之前编译好的程序(CameraDshowApp.exe)了。这将会显示可供选择的用于生成过滤图的过滤器列表。如果摄像头驱动被正确地加载,设备名"CAM1:"将会显示在这个组合对话框中。
选择需要的过滤器并点击OK,这将会以摄像头支持的、接近于注册表设置项"PreferredWidth"中数值的尺寸大小来运行摄像头的预览功能。你可以检查$(_WINCEROOT)\PUBLIC\ThirdParty\Catalog\USBCam\Driver\usbcam.reg这个注册表文件来确定"PreferredWidth"注册表项。
同时请根据Webcam支持的输出格式来设置如下的注册表项。我的摄像头支持YUV无压缩输出,所以我的相应的注册表项设置为:
[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers\Video_Class] "UncompressedSupport"=dword:1 "MJPEGSupport"=dword:0