webcam开发过程中的一些错误
2008-01-20 23:25
267 查看
1. 设置编译环境时,注意头文件的包含顺序,可以通过查看编译错误调整头文件顺序.
2. 关于VS2005中无法识别CSource,应添加头文件streams.h,而dshow.h没有用.
3. 改写Filter和Pin的构造函数.
4. Pin需要继承的两个纯虚拟函数:DecideBufferSize和FillBuffer.如果没改写,将出现编译错误,注意仔细查看这些编译错误,以找到问题所在.
5. DllCanUnloadNow和DllGetClassObject既然什么都不做,可否去掉?引起链接错误,不知怎么解决?居然是没有添加Strmbasd.lib引起的!我还以为是要自己实现呢!建议在开始写代码前就将几个需要的LIB添加到LINK中, Strmbasd.lib, Msvcrtd.lib, Winmm.lib,Strmiids.lib,注意在LINK中它们之间没有逗号,而是空格,否则会出现”can not find file “XXX.lib”的编译错误.
6. 出现CLSID_的链接错误(unresolved CLSID_MyFilter)也可以通过添加头文件”initguid.h”解决,出现undefined symbol CLSID_MyFilter也是添加头文件”initguid.h”
7. CLSID_NullRenderer需要包含头文件qedit.h,否则有编译错误.
8. 关于链接错误error LNK2001: unresolved external symbol "unsigned int (__stdcall*ATL::g_pfnGetThreadACP)(void)"(?g_pfnGetThreadACP@ATL@@3P6GIXZA),必须将atlconv.h换成atlbase.h,且需将LINKER->Input->Ignore all default libraries选为No.两个都要改,改一个不行. atlconv.h for vs2003 atlbase.h for vs2005
9. 关于can not open file MSVCRT.lib或MSVCRTD.lib或LIBCD.lib或LIBCMT.lib或LIBCMTD.lib或LIBC.lib的问题.需要Ignore specific library.
/NODEFAULTLIB:library:Ignore Libraries This option removes the specified library or libraries from the list of libraries it searches when resolving external references.
/NODEFAULTLIB Ignore All Default Libraries This option removes all default libraries from the list of libraries it searches when resolving external references.
关于在WIN32程序中使用MFC中的CString和CFile等的问题.因为要使用MFC中的CString和CFile,,所以必须包含MFC的afx.h头文件(因为建立的不是MFC程序所以必须手工添加,如果是MFC程序已经包含必要的头文件,可直接使用CString和CFile等),因此我们在stdafx.h中添加afx.h,这里需要注意的是afx.h必须放在所有手工添加的头文件的前面,否则将出现下面的错误: fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>,例如,如果我们象下面这样包含就会出现上面的错误:
#include "streams.h"
#include "afx.h"
应该改成:
#include "afx.h"
#include "streams.h"
其实将系统和类库框架的头文件放在前面是一种很好的习惯.
另外必须更改USE OF MFC选项,不能用use standard windows libraries,否则出现如下错误:
fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
选择use mfc in a static library出现很多错误.奇怪!!!!!!!!然后添加 /FORCE:MULTIPLE,错误只剩下一个拉,如下: fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d],将C/C++中的runtime library改为Debug Multithreaded,出现如下错误error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup,再将LINKER->INPUT->Additional dependencies中输入的Msvcrtd.lib改为libcmtd.lib,问题解决.
选择use mfc in a shared dll,只有一个错误,如下:
error LNK2005: _DllMain@12 already defined in 3602Webcam.obj
解决方法:添加 /FORCE:MULTIPLE
原因:主要是单线程和多线程不匹配的问题.有的链接的是单线程LIB,有的链接的是多线程LIB,解决方法: /FORCE:MULTIPLE
还有就是USE OF MFC的选择与RUNTIME Library选择不匹配的问题,两者是对应选择,下面是对应原则:
Debug, shared library MFC applications - "Debug Multithreaded Dll."
Release, shared library MFC applications - "Multithread Dll."
Debug, static library MFC applications - "Debug Multithreaded."
Release, static library MFC applications - "Multithreaded."
2. 关于VS2005中无法识别CSource,应添加头文件streams.h,而dshow.h没有用.
3. 改写Filter和Pin的构造函数.
4. Pin需要继承的两个纯虚拟函数:DecideBufferSize和FillBuffer.如果没改写,将出现编译错误,注意仔细查看这些编译错误,以找到问题所在.
5. DllCanUnloadNow和DllGetClassObject既然什么都不做,可否去掉?引起链接错误,不知怎么解决?居然是没有添加Strmbasd.lib引起的!我还以为是要自己实现呢!建议在开始写代码前就将几个需要的LIB添加到LINK中, Strmbasd.lib, Msvcrtd.lib, Winmm.lib,Strmiids.lib,注意在LINK中它们之间没有逗号,而是空格,否则会出现”can not find file “XXX.lib”的编译错误.
6. 出现CLSID_的链接错误(unresolved CLSID_MyFilter)也可以通过添加头文件”initguid.h”解决,出现undefined symbol CLSID_MyFilter也是添加头文件”initguid.h”
7. CLSID_NullRenderer需要包含头文件qedit.h,否则有编译错误.
8. 关于链接错误error LNK2001: unresolved external symbol "unsigned int (__stdcall*ATL::g_pfnGetThreadACP)(void)"(?g_pfnGetThreadACP@ATL@@3P6GIXZA),必须将atlconv.h换成atlbase.h,且需将LINKER->Input->Ignore all default libraries选为No.两个都要改,改一个不行. atlconv.h for vs2003 atlbase.h for vs2005
9. 关于can not open file MSVCRT.lib或MSVCRTD.lib或LIBCD.lib或LIBCMT.lib或LIBCMTD.lib或LIBC.lib的问题.需要Ignore specific library.
/NODEFAULTLIB:library:Ignore Libraries This option removes the specified library or libraries from the list of libraries it searches when resolving external references.
/NODEFAULTLIB Ignore All Default Libraries This option removes all default libraries from the list of libraries it searches when resolving external references.
关于在WIN32程序中使用MFC中的CString和CFile等的问题.因为要使用MFC中的CString和CFile,,所以必须包含MFC的afx.h头文件(因为建立的不是MFC程序所以必须手工添加,如果是MFC程序已经包含必要的头文件,可直接使用CString和CFile等),因此我们在stdafx.h中添加afx.h,这里需要注意的是afx.h必须放在所有手工添加的头文件的前面,否则将出现下面的错误: fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>,例如,如果我们象下面这样包含就会出现上面的错误:
#include "streams.h"
#include "afx.h"
应该改成:
#include "afx.h"
#include "streams.h"
其实将系统和类库框架的头文件放在前面是一种很好的习惯.
另外必须更改USE OF MFC选项,不能用use standard windows libraries,否则出现如下错误:
fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
选择use mfc in a static library出现很多错误.奇怪!!!!!!!!然后添加 /FORCE:MULTIPLE,错误只剩下一个拉,如下: fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d],将C/C++中的runtime library改为Debug Multithreaded,出现如下错误error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup,再将LINKER->INPUT->Additional dependencies中输入的Msvcrtd.lib改为libcmtd.lib,问题解决.
选择use mfc in a shared dll,只有一个错误,如下:
error LNK2005: _DllMain@12 already defined in 3602Webcam.obj
解决方法:添加 /FORCE:MULTIPLE
原因:主要是单线程和多线程不匹配的问题.有的链接的是单线程LIB,有的链接的是多线程LIB,解决方法: /FORCE:MULTIPLE
还有就是USE OF MFC的选择与RUNTIME Library选择不匹配的问题,两者是对应选择,下面是对应原则:
Debug, shared library MFC applications - "Debug Multithreaded Dll."
Release, shared library MFC applications - "Multithread Dll."
Debug, static library MFC applications - "Debug Multithreaded."
Release, static library MFC applications - "Multithreaded."
相关文章推荐
- 【原创】对于一些Android开发过程中坑爹、细小,但又重要的错误的总结
- ava web 开发过程中常见的一些错误
- iOS开发过程中的一些错误提示和解决办法大全
- Java开发过程中遇到的一些小错误集锦-以后会不断地更新
- 最近在ArcGIS Engine开发中关于调用gp工具过程出现COM 组件的调用返回了错误 HRESULT E_FAIL 错误的解决方法 和 学习oracle中遇到的一些问题总结
- 在开发游戏过程中遇到的一些错误(很基础的错误)
- iOS 开发过程中常出现的一些错误总结
- Android移动非编开发过程--NDK、OPENGL ES开发中的一些常见错误及解决办法
- android开发过程遇到的一些错误
- 一些开发ssh2过程中遇到错误的解决办法
- android开发中genymotion安装过程详解(包括安装过程中一些问题的解决方法)
- PHP开发中常见的一些错误
- IOS开发 开发过程中的一些尺寸问题
- android系统开发编译过程中的汇编错误
- 分享android开发过程中用到的一些开源框架
- ArcGIS Engine开发过程中 命令 “esriRegasm.exe xxxxx\xx.dll" /p:Desktop /u/s"已退出,代码为-1 错误解决方法
- 开发过程中遇到的一些编码问题怎么解决
- Liferay开发过程中的一些常见问题
- reactjs 开发过程中遇到的一些问题
- jquerymobile1.4开发过程中遇到的一些问题总结