KevinLib 在 VS2008 下的成功编译

 

下载的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(argsfmt);

vsprintf(buffmtargs);

//添加

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;

    forDWORD i=0; i<m_dwNumBuffersi++ )

    {

        ifm_apDSBuffer[i] )

        {  

            DWORD dwStatus = 0;

            m_apDSBuffer[i]->GetStatus( &dwStatus );

            if ( ( dwStatus & DSBSTATUS_PLAYING ) == 0 )

                break;

        }

    }

 

    ifi != m_dwNumBuffers )

        return m_apDSBufferi ];

    else

        return m_apDSBufferrand() % 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”目录下便可成功运行程序