直接上图,捡重点说:
先安装directshow,我安装的是dx90asdk.exe;
VC6(vc2005配置方式相同)配置directshow(directshow路径放到所有路径前面):
vc2008配置directshow:(与之前版本有一点区别,包含路径和库文件路径放到其他VC默认目录的后面,避免 错误:error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面))
一般VC2008配置DirectShow遇到的错误:
编译BaseClasses 正在编译... dllentry.cpp D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(222) : error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面) D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(222) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(5940) : error C2146: 语法错误: 缺少“;”(在标识符“Buffer”的前面) D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(5940) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(5940) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int D:\DXSDK\Include\uuids.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 生成日志保存在“file://d:\BaseClasses\Debug_Unicode\BuildLog.htm” BaseClasses - 5 个错误,个警告 出现错误的地方: typedef void *PVOID; typedef void * POINTER_64 PVOID64; 更改: #define POINTER_64 __ptr64///////gai typedef void *PVOID; typedef void * POINTER_64 PVOID64;//// 错误:.\wxdebug.cpp(567) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int 错误地方:static g_dwLastRefresh = 0; 修改:static int g_dwLastRefresh = 0; 编译Capture 出现错误:LINK : fatal error LNK1104: 无法打开文件“libci.lib” 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\Capture\CaptureTex\Debug\BuildLog.htm” CaptureTex - 1 个错误,个警告 错误原因:缺少数据库LIBCI.LIB在2003和2005中已经不存在了 编译DMODEMO 错误: ..\..\..\Common\Src\dsutil.cpp(686) : error C2065: “i”: 未声明的标识符 错误的地方: if( i != m_dwNumBuffers ) return m_apDSBuffer[ i ]; else return m_apDSBuffer[ rand() % m_dwNumBuffers ]; 更改:在前面添加 unsigned char i;///// 编译DMOSAMPLE d:\DXSDK\include\dmoimpl.h(622) : error C2065: “dw”: 未声明的标识符 d:\DXSDK\include\dmoimpl.h(588): 编译类模板成员函数“HRESULT IMediaObjectImpl<_DERIVED_,NUMBEROFINPUTS,NUMBEROFOUTPUTS>::ProcessOutput(DWORD,DWORD,DMO_OUTPUT_DATA_BUFFER *,DWORD *)”时 with [ _DERIVED_=CSample, NUMBEROFINPUTS=1, NUMBEROFOUTPUTS=2 ] d:\dxsdk\samples\c++\directshow\dmo\dmosample\Sample.h(21): 参见对正在编译的类模板实例化“IMediaObjectImpl<_DERIVED_,NUMBEROFINPUTS,NUMBEROFOUTPUTS>”的引用 with [ _DERIVED_=CSample, NUMBEROFINPUTS=1, NUMBEROFOUTPUTS=2 ] d:\DXSDK\include\dmoimpl.h(623) : error C2228: “.dwStatus”的左边必须有类/结构/联合 d:\DXSDK\include\dmoimpl.h(624) : error C2228: “.fIncomplete”的左边必须有类/结构/联合 d:\DXSDK\include\dmoimpl.h(626) : error C2228: “.fIncomplete”的左边必须有类/结构/联合 sample.cpp d:\DXSDK\include\uuids.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 d:\DXSDK\include\dmoimpl.h(622) : error C2065: “dw”: 未声明的标识符 d:\DXSDK\include\dmoimpl.h(588): 编译类模板成员函数“HRESULT IMediaObjectImpl<_DERIVED_,NUMBEROFINPUTS,NUMBEROFOUTPUTS>::ProcessOutput(DWORD,DWORD,DMO_OUTPUT_DATA_BUFFER *,DWORD *)”时 with [ _DERIVED_=CSample, NUMBEROFINPUTS=1, NUMBEROFOUTPUTS=2 ] d:\dxsdk\samples\c++\directshow\dmo\dmosample\Sample.h(21): 参见对正在编译的类模板实例化“IMediaObjectImpl<_DERIVED_,NUMBEROFINPUTS,NUMBEROFOUTPUTS>”的引用 with [ _DERIVED_=CSample, NUMBEROFINPUTS=1, NUMBEROFOUTPUTS=2 ] d:\DXSDK\include\dmoimpl.h(623) : error C2228: “.dwStatus”的左边必须有类/结构/联合 d:\DXSDK\include\dmoimpl.h(624) : error C2228: “.fIncomplete”的左边必须有类/结构/联合 d:\DXSDK\include\dmoimpl.h(626) : error C2228: “.fIncomplete”的左边必须有类/结构/联合 state.cpp StdAfx.cpp util.cpp 正在生成代码... 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\DMO\DMOSample\Debug_Unicode\BuildLog.htm” dmosample - 8 个错误,个警告 ========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过========== 更改:在出错的语句前加上DWORD_PTR dw;/////// 编译PlayDVD 正在链接... PlayDVD.obj : error LNK2001: 无法解析的外部符号"unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6GIXZA) .\Debug_Unicode/PlayDVD.exe : fatal error LNK1120: 1 个无法解析的外部命令 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\DVD\PlayDVD\Debug_Unicode\BuildLog.htm” PlayDVD - 2 个错误,个警告 ========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过========== 编译DVD 错误: PlayDVD.obj : error LNK2001: 无法解析的外部符号"unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6GIXZA) .\Debug/PlayDVD.exe : fatal error LNK1120: 1 个无法解析的外部命令 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\DVD\PlayDVD\Debug\BuildLog.htm” PlayDVD - 2 个错误,个警告 ========== 生成: 1 已成功, 1 已失败, 0 最新, 0 已跳过========== 无法解决 编译Editing 错误:xmltltst.cpp d:\DXSDK\include\uuids.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 .\xmltltst.cpp(291) : error C2065: “k”: 未声明的标识符 .\xmltltst.cpp(304) : error C2065: “j”: 未声明的标识符 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\Editing\XTLTest\Debug_Unicode\BuildLog.htm” XTLTest - 2 个错误,个警告 ========== 生成: 6 已成功, 1 已失败, 1 最新, 0 已跳过========== 更改:添加unsigned long k = 0 ;/////// unsigned long j = 0 ;//////
编译PlayWndASF 错误: playwndasf.obj : error LNK2001: 无法解析的外部符号"unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6GIXZA) urllaunch.obj : error LNK2001: 无法解析的外部符号"unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6GIXZA) .\Debug_Unicode/PlayWndASF.exe : fatal error LNK1120: 1 个无法解析的外部命令 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\Players\PlayWndASF\Debug_Unicode\BuildLog.htm” PlayWndASF - 3 个错误,个警告 ========== 全部重新生成: 1 已成功, 1 已失败, 0 已跳过========== 更改: 向数据库中添加atlsd.lib数据库文件 编译demos(D:\DXSDK\Samples\C++\Demos) 错误: StdAfx.cpp d:\program files\microsoft directx sdk (april 2007)\include\d3d9types.h(1385) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 d:\DXSDK\Samples\C++\common\include\D3DFile.h(56) : error C2061: 语法错误: 标识符“LPDIRECTXFILEDATA” d:\DXSDK\Samples\C++\common\include\D3DFile.h(111) : error C2061: 语法错误: 标识符“LPDIRECTXFILEDATA” d:\DXSDK\Samples\C++\common\include\D3DFile.h(113) : error C2061: 语法错误: 标识符“LPDIRECTXFILEDATA” 生成日志保存在“file://d:\DXSDK\Samples\C++\Demos\Donuts4\Debug\BuildLog.htm” Donuts4 - 3 个错误,个警告 ========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过========== 在dsdfile.h的顶部加入#include <dxfile.h>就可以 再次编译出现错误: .\..\Common\Src\d3dfile.cpp(151) : error C2664: “D3DXLoadMeshFromXof”: 不能将参数1 从“LPDIRECTXFILEDATA”转换为“LPD3DXFILEDATA” 与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换 错误出处: if( FAILED( hr = D3DXLoadMeshFromXof( pFileData, D3DXMESH_SYSTEMMEM, pd3dDevice, &pAdjacencyBuffer, &pMtrlBuffer, NULL, &m_dwNumMaterials, &m_pSysMemMesh ) ) ) 更改: if( FAILED( hr = D3DXLoadMeshFromXof((LPD3DXFILEDATA)pFileData, D3DXMESH_SYSTEMMEM, pd3dDevice, &pAdjacencyBuffer, &pMtrlBuffer, NULL, &m_dwNumMaterials, &m_pSysMemMesh ) ) ) 编译d3d 编译dxtex 错误: .\dxtexdoc.cpp(694) : error C2440: “初始化”: 无法从“const char *”转换为“TCHAR *” 转换丢失限定符 .\dxtexdoc.cpp(698) : error C2440: “初始化”: 无法从“const char *”转换为“TCHAR *” 转换丢失限定符 dxtexview.cpp WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) d:\program files\microsoft directx sdk (april 2007)\include\d3d9types.h(1385) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 MainFrm.cpp WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) d:\program files\microsoft directx sdk (april 2007)\include\d3d9types.h(1385) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 StdAfx.cpp WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) d:\program files\microsoft directx sdk (april 2007)\include\d3d9types.h(1385) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失 正在生成代码... 正在创建浏览信息文件... Microsoft ?????????? Version 8.00.50727 Copyright (C) Microsoft Corporation. All rights reserved. 生成日志保存在“file://d:\DXSDK\Samples\C++\Direct3D\DXTex\Debug\BuildLog.htm” dxtex - 2 个错误,个警告 ========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过========== 错误地方: TCHAR* pszLeaf = strrchr(lpszPathName, '\\'); 更改:TCHAR* pszLeaf = (TCHAR*)strrchr(lpszPathName, '\\'); 编译后出现错误: 正在链接... CVTRES : fatal error CVT1100: 重复的资源。type:MANIFEST, name:1, language:0x0409 LINK : fatal error LNK1123: 转换到COFF 期间失败: 文件无效或损坏 更改: 将在Debug模式下编译改为Release模式下编译。 编译Water(water.cpp)错误: .\Water.cpp(748) : error C2039: “Pass”: 不是“ID3DXEffect”的成员
更改: 直接去掉这句// m_pEffect->Pass(uPass) \fur.cpp(424) : error C2039: “Pass”: 不是“ID3DXEffect”的成员 d:\program files\microsoft directx sdk (april 2007)\include\d3dx9effect.h(316) : 参见“ID3DXEffect”的声明 .\fur.cpp(550) : error C2039: “Pass”: 不是“ID3DXEffect”的成员 d:\program files\microsoft directx sdk (april 2007)\include\d3dx9effect.h(316) : 参见“ID3DXEffect”的声明 .\fur.cpp(567) : error C2039: “Pass”: 不是“ID3DXEffect”的成员 d:\program files\microsoft directx sdk (april 2007)\include\d3dx9effect.h(316) : 参见“ID3DXEffect”的声明 .\fur.cpp(585) : error C2039: “Pass”: 不是“ID3DXEffect”的成员 d:\program files\microsoft directx sdk (april 2007)\include\d3dx9effect.h(316) : 参见“ID3DXEffect”的声明 dxutil.cpp 更改:将Pass改成小写pass。在Water编译中也是错误的!!!
编译VertexBlend(vertexblend.cpp) 错误:\vertexblend.cpp(312) : error C2065: “i”: 未声明的标识符 .\vertexblend.cpp(315) : error C2228: “.v”的左边必须有类/结构/联合 .\vertexblend.cpp(315) : error C2228: “.x”的左边必须有类/结构/联合 .\vertexblend.cpp(316) : error C2228: “.blend”的左边必须有类/结构/联合 改正:for( INT i=0; i<dwNumVertices; i++ ) { // Set the blend factors for the vertices FLOAT a = ( pVertices[i].v.x - fMinX ) / ( fMaxX - fMinX ); pVertices[i].blend = 1.0f-sinf(a*D3DX_PI*1.0f); }///INT 编译dinput( diconfig) 编译错误: d:\dxsdk\samples\c++\directinput\diconfig\collections.h(640) : error C2143: 语法错误: 缺少“;”(在“CList<TYPE,ARG_TYPE>::NewNode”的前面) d:\dxsdk\samples\c++\directinput\diconfig\collections.h(640) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int d:\dxsdk\samples\c++\directinput\diconfig\collections.h(640) : fatal error C1903: 无法从以前的错误中恢复;正在停止编译 发生错误的地方: CList<TYPE, ARG_TYPE>::CNode/////CList<TYPE, ARG_TYPE>::CNode* CList<TYPE, ARG_TYPE>::NewNode(CList::CNode *pPrev, CList::CNode * pNext)//// 更改:???????????????????????? 编译dplay(voiceserver) 正在链接... LINK : fatal error LNK1104: 无法打开文件“dplay.lib” 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectPlay\VoiceClientServer\VoiceServer\Win32_Debug_Unicode\BuildLog.htm” VoiceServer - 1 个错误,个警告 ========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过========== 错误分析:dplay.lib没有这个库文件.在vc6.0中有. 改正:下载库文件dplay.lib,添加到D:\Program Files\Microsoft Visual Studio 8\VC\lib目录下.编译方式为Release. 编译dshow(inftee) 错误:正在编译资源清单... 正在链接... LINK : fatal error LNK1117: 选项“debug:mapped,full”中的语法错误 生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\Filters\INFTee\Debug_Unicode\BuildLog.htm” inftee - 1 个错误,个警告 ========== 全部重新生成: 1 已成功, 1 已失败, 0 已跳过========== LINK : fatal error LNK1117: 选项“debug:mapped,full”中的语法错误 解决方案: LNK1117是"option"错误,将相关的选项去掉就可以了! 即在连接器属性中的命令行中的"附加选项去掉错误的部分". |