我尝试将此邮件发送到Geraint Davies,但其网站上的电子邮件地址因“用户未知”错误而退回。
我正在尝试使用Visual Studio 2015从站点上可用的源构建GMFBridge及其应用程序.VS将项目文件转换为新格式,没有明显错误,但构建过程无效
我已下载并安装了Windows Template Library(WTL),found streams.h
并将其添加到Include
目录(< gripe >为什么可以这是在解决方案级别完成的,所以项目的所有都会继承它吗?< / gripe >)和我{{ 3}}到GMFBridge
依赖于它的解决方案。
链接GMFBridge的未解决的外部错误,例如CBaseFilter::FindPin
,当我更正GMFBridge项目的added BaseClasses
as a project时就离开了。
构建strmbasd.lib
生成了2个警告,因为'GetVersionExtW' was declared deprecated
。我意识到这些不是 GMFBridge 问题,但是它们在构建它时会产生麻烦,因为必须将BaseClasses
库构建为依赖项。
代码中有一堆 GMFBridge 编译错误:
#if (NTDDI_VERSION >= NTDDI_VISTA) && !defined(_USING_V110_SDK71_) && !defined(_ATL_XP_TARGETING)
return LCMapStringEx(lpLocaleName, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest, lpVersionInformation, lpReserved, sortHandle);
#else
// use LCMapStringEx if it is available (only on Vista+)...
typedef int (__stdcall *PFNLCMAPSTRINGEX)(LPCWSTR, DWORD, LPCWSTR, int, LPWSTR, int, LPNLSVERSIONINFO, LPVOID, LPARAM);
IFDYNAMICGETCACHEDFUNCTIONTYPEDEF(L"kernel32.dll", PFNLCMAPSTRINGEX, "LCMapStringEx", pfLCMapStringEx)
{
return (*pfLCMapStringEx)(lpLocaleName, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest, lpVersionInformation, lpReserved, sortHandle);
}
// ...otherwise fall back to using LCMapString.
return LCMapStringW(_AtlDownlevelLocaleNameToLCID(lpLocaleName), dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest);
#endif
在我看来好像编译器可能正在使用错误的分支。当我将_USING_V110_SDK71_
添加到C ++预处理程序指令时, 一组问题消失了,但我确信黑客攻击编译器版本不是正确的解决方案。
构建 GMFPlay 和 GMFPreview 应用程序时,我仍然遇到48次编译错误。它们看起来完全归因于HMONITOR
,MONITORINFO
和MONITOR_DEFAULTTONEAREST
未定义。我在 social.msdn 上找到了一个页面。 Treat wchar_t as built-in type建议的解决方案是设置我尝试的WINVER=0x0500
,但是产生了“WINVER
重新定义”警告 - 并且,正如我所料,并没有解决任何问题。我在Build Errors after Converting project from vs2005 to vs2010搜索了MONITOR_DEFAULTTONEAREST
,而出现的所有是两个未回答的问题。
此时,我对如何解决这些问题感到茫然,网络搜索似乎没有产生有用的结果。我不是在问正确的问题吗?
正如MSDN DirectShow Forums在Roman R中指出的那样,this article网站上有预先构建的二进制文件,所以此练习现在基本上没有实际意义。但是,正如上述文章中的OP所指出的,将调试到 GMFBridge代码需要的不仅仅是可用于链接的DLL。此外,修复这些问题现在将使代码适应未来的架构(任何人都有128位?)很多比他们只是在地毯下扫描更容易。