下载的KevinLib是060222版本。html
一、编译工程,产生以下错误:windows
d:/kevinlib_060222/src/ffdshow/src/wmv9/ff_wmv9.cpp(41) : error C2664: “OutputDebugStringW”: 不能将参数1 从“char [1024]”转换为“LPCWSTR”ide
c:/program files/microsoft sdks/windows/v6.0a/include/qedit.h(498) : fatal error C1083: 没法打开包括文件:“dxtrans.h”: No such file or directory函数
d:/kevinlib_060222/src/kevinlib/kevinlib.h(268) : error C4430: 缺乏类型说明符- 假定为int。注意: C++ 不支持默认int工具
d:/kevinlib_060222/src/kevinlib/kevinlib.h(271) : error C4430: 缺乏类型说明符- 假定为int。注意: C++ 不支持默认intui
c:/program files/microsoft visual studio 9.0/vc/include/crtdefs.h(494) : error C2632: “int”后面的“int”非法spa
>>> 打开项目“ff_wmv9”下的“ff_wmv9.Cpp”文件,修改以下代码:debug
static __inline void DPRINTF(char *fmt, ...)code
{htm
va_list args;
char buf[DPRINTF_BUF_SZ];
va_start(args, fmt);
vsprintf(buf, fmt, args);
//添加
TCHAR* wbuf = new TCHAR[DPRINTF_BUF_SZ];
MultiByteToWideChar(CP_ACP, NULL, buf, sizeof(buf) / sizeof(char),
wbuf, sizeof(buf) / sizeof(char));
//将buf改成wbuf
OutputDebugString(bufwbuf);
}
由于缺失“dxtrans.h”,故而须要下载并安装DirectX SDK安装包“dxsdk_feb2005.exe”。安装完成以后,在DirectX SDK目录下搜索该头文件,发现其在目录“C:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)/Include”下。接着,打开VS2008的“项目——工具——项目和解决方案——VC++目录”,在“包含文件”中添加该目录。
>>> 打开项目“KevinLibDemo”项目下的“KevinLib.h”文件,修改以下代码:
KEVINLIB_API bool CoInit();
KEVINLIB_API void UnCoInit(); //添加void
KEVINLIB_API bool InitSocket();
KEVINLIB_API void UnInitSocket(); //添加void
>>> 打开项目“libxvidcore”下的“portab.h”文件,修改以下代码:
#if defined(ARCH_IS_32BIT)
# define CACHE_LINE 64
# define ptr_t uint32_t
//# define intptr_t int32_t //注释掉该行代码
# if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
# include <stdarg.h>
# else
# define uintptr_t uint32_t
# endif
#elif defined(ARCH_IS_64BIT)
# define CACHE_LINE 64
# define ptr_t uint64_t
//# define intptr_t int64_t //注释掉该行代码
# if defined (_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
# include <stdarg.h>
# else
# define uintptr_t uint64_t
# endif
#else
# error You are trying to compile XviD without defining address bus size.
#endif
参考:http://blog.sina.com.cn/s/blog_4c451e0e0100ahxg.html
二、从新编译,产生以下错误:
d:/kevinlib_060222/include/streams.h(136) : fatal error C1083: 没法打开包括文件:“reftime.h”: No such file or directory
LINK : fatal error LNK1104: 没法打开文件“../../lib/debug/KevinLib.lib”
d:/kevinlib_060222/src/kevinlibdemo/kevinlibdemodlg.cpp(171) : error C2065: “i”: 未声明的标识符
>>> 在目录“C:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)”中搜索“reftime.h”,发现并不存在该文件。故而还须要下载“dxsdk_feb2005_extras.exe”并解压到“C:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)”目录下,此时该目录下会多出一个“Extras”子目录。
在“Extras”子目录中搜索“reftime.h”,发现在目录“C:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)/Extras/DirectShow/Samples/C++/DirectShow/BaseClasses”下。因而,打开VS2008的“项目——工具——项目和解决方案——VC++目录”,在“包含文件”中添加该目录。
>>> 打开项目“KevinLibDemo”下的“KevinLibDemoDlg.cpp”文件,修改以下代码:
int i = 0;
for(int i = 0; i < lVNum ; i++)
{
m_ComVCam.AddString(szVName[i]);
}
m_ComVCam.SetCurSel(0);
if(i > 1)
m_ComVCam.SetCurSel(1);
三、从新编译,产生以下错误:
d:/kevinlib_060222/src/ffdshow/src/wmv9/char_t.h(10) : error C2632: “wchar_t”后面的“wchar_t”非法
d:/kevinlib_060222/src/kevinlib/audiocapturedirectx.h(16) : fatal error C1083: 没法打开包括文件:“resource.h”: No such file or directory
LINK : fatal error LNK1104: 没法打开文件“../../lib/debug/KevinLib.lib”
>>> 右键项目“KevinLib”,选择“属性——配置属性——C/C++——语言——将wchar_t视为内置类型”由“是”改成“否”。
>>> 打开项目“KevinLib”下的“AudioCaptureDirectX.h”文件,注释掉第16行的“#include "resource.h”。
四、从新编辑,产生以下错误:
d:/kevinlib_060222/src/kevinlib/stdafx.h(158) : error C4430: 缺乏类型说明符- 假定为int。注意: C++ 不支持默认int
d:/kevinlib_060222/src/kevinlib/stdafx.h(158) : error C2556: “int UnCoInit(void)”: 重载函数与“void UnCoInit(void)”只是在返回类型上不一样
d:/kevinlib_060222/src/kevinlib/kevinlib.h(268) : 参见“UnCoInit”的声明
d:/kevinlib_060222/src/kevinlib/stdafx.h(158) : error C2371: “UnCoInit”: 重定义;不一样的基类型
d:/kevinlib_060222/src/kevinlib/kevinlib.h(268) : 参见“UnCoInit”的声明
d:/kevinlib_060222/src/kevinlib/stdafx.h(169) : error C4430: 缺乏类型说明符- 假定为int。注意: C++ 不支持默认int
d:/kevinlib_060222/src/kevinlib/stdafx.h(169) : error C2556: “int UnInitSocket(void)”: 重载函数与“void UnInitSocket(void)”只是在返回类型上不一样
d:/kevinlib_060222/src/kevinlib/kevinlib.h(271) : 参见“UnInitSocket”的声明
d:/kevinlib_060222/src/kevinlib/stdafx.h(169) : error C2371: “UnInitSocket”: 重定义;不一样的基类型
d:/kevinlib_060222/src/kevinlib/kevinlib.h(271) : 参见“UnInitSocket”的声明
>>> 打开项目“KevinLib”下的“stdafx.h”文件,修改以下代码:
void UnCoInit() //添加void
{
::CoUninitialize();
}
bool InitSocket()
{
return ::AfxSocketInit(NULL);
}
void UnInitSocket() //添加void
{
}
五、从新编译,产生以下错误:
d:/kevinlib_060222/src/kevinlib/common/dsutil.cpp(688) : error C2065: “i”: 未声明的标识符
d:/kevinlib_060222/src/kevinlib/common/dsutil.cpp(689) : error C2065: “i”: 未声明的标识符
LINK : fatal error LNK1104: 没法打开文件“../../lib/debug/KevinLib.lib”
>>> 打开项目“KevinLib”下的“dsutil.cpp”文件,修改以下代码:
DWORD i=0;
for( DWORD i=0; i<m_dwNumBuffers; i++ )
{
if( m_apDSBuffer[i] )
{
DWORD dwStatus = 0;
m_apDSBuffer[i]->GetStatus( &dwStatus );
if ( ( dwStatus & DSBSTATUS_PLAYING ) == 0 )
break;
}
}
if( i != m_dwNumBuffers )
return m_apDSBuffer[ i ];
else
return m_apDSBuffer[ rand() % m_dwNumBuffers ];
六、从新编译,产生以下错误:
LINK : fatal error LNK1104: 没法打开文件“dsound.lib”
>>> 在DirectX SDK目录下搜索“dsound.lib”,发现其在目录“C:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)/Lib/x86”下。因而,打开VS2008的“工具——选项——项目和解决方案——VC++目录——库文件”,添加上述目录。
七、从新编译,产生以下错误:
LINK : fatal error LNK1104: 没法打开文件“../../lib/debug/ff_wmv9.lib”
>>> 在工程目录下搜索“ff_wmv9.lib”库文件,发现其在目录“./src/ffdshow/src/wmv9/debug_unicode”下。因而,复制该lib文件到“./lib/debug”目录下,其中,“.”表示工程当前目录,好比“D:/KevinLib_060222”。
八、从新编译,终于成功经过了!!!
九、在“./bin/debug”路径下运行“KevinLibDemo.exe”,产生以下错误:
>>> 在工程目录下搜索“ff_wmv9.dll”,发现其在目录“./src/bin”下,将其拷贝到“KevinLibDemo.exe”目录下,便可成功运行程序。