今天需要将一份vs2003上面的工程转成vs2010下面的,在转换过程中出现了如下问题,特作此记录。
一.头文件streams.h、qedit.h找不见
这个错误需要我们在工程中配置directshow,由于目前directshow已经不随着directx一起发布了,而是集成到了windows platform sdk当中,所以我们需要安装windows platfrom sdk7.
接下来,我们需要进入目录“C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\BaseClasses”,打开baseclasses.sln文件,进行编译即可生成工程中所需要的库文件strmbaseRU.lib、strmbaseDU.lib,其所在目录是“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Samples\multimedia\lib”,如何生成的是64位的库文件,则所在目录是“C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\libx64”。
生成好了所需要的directshow库文件后,就需要在vs2010中配置它了。如果整个解决方案里面的工程都需要用到directshow的话,可以在通过如下方式设置。
1.点击“view->other window->property manager"
2. 点击任意一个工程,双击Microsoft.Cpp.Win32.user,在弹出框中设置include、llibrary即可
下面是directShow的设置情况:
1.include
2.lib
设置了以上内容后,在编译qedit.h的时候会报:无法打开包括文件:"dxtrans.h": No such file or directory c:\program files\microsoft sdks\windows\v6.0a\include\qedit.h 498这个错误,修正该错误的方法为在qedit.h文件中添加如下内容即可:
#pragma include_alias( "dxtrans.h", "qedit.h" ) #define __IDxtCompositor_INTERFACE_DEFINED__ #define __IDxtAlphaSetter_INTERFACE_DEFINED__ #define __IDxtJpeg_INTERFACE_DEFINED__ #define __IDxtKey_INTERFACE_DEFINED__
二.报连接错误GIPSVoiceEngineLib.lib(lpc_maskingmodel.obj) : error LNK2019: unresolved external symbol __iob referenced in function _GIPS_ISAC_levdurb
1>GIPSVoiceEngineLib.lib(fftns.obj) : error LNK2001: unresolved external symbol __iob
解决方法为:
//在main函数文件中添加如下语句 #ifdef __cplusplus extern "C" #endif FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};
这个错误的原因是系统或者文件夹下面有cl.exe这个文件,而vs2010没有用自己的cl.exe,使用个系统目录下或者工程目录下面的老版本的cl.exe的原因,将这个文件移除即可解除这个错误