我正在开发使用相机的通用Windows应用程序,我需要为相机创建自定义效果。该应用程序是用C#编写的,效果是一个C ++ DLL,它使用Media Foundation和IDL来定义自定义WinRT组件。
我已经在Windows 8.1上多次成功执行此操作,并记录了以下技巧here或here。
我现在想在Windows 10 UWP上移植它。我知道Windows 10上存在一个已知问题,它使编译器失败并显示错误“无法加载依赖文件.Windows.winmd”(请参阅here)。但即使有了这个修复,我也无法成功构建组件。
这是IDL:
import "Windows.Media.idl";
#include <sdkddkver.h>
namespace MyEffect
{
[version(NTDDI_WIN10), activatable(NTDDI_WIN10)]
runtimeclass MyEffect
{
[default] interface Windows.Media.IMediaExtension;
}
}
MIDL命令行(为便于提高可读性而格式化):
/env win32 /h "MyEffect_h.h" /W1 /char signed /enum_class
/tlb "$(OutDir)\MyEffect.tlb" /ns_prefix
/metadata_dir "$(WindowsSDK_MetadataFoundationPath)"
/nologo /winrt
/winmd "$(OutDir)\MyEffect.winmd"
此命令成功。然后我添加以下自定义构建步骤:
mdmerge -metadata_dir “<metadata_dir>”
-i “$(OutDir).”
-o “$(OutDir)merged”
-partial
-v
并且此命令始终根据以下内容失败:
如果我将解析为$(WindowsSDK_MetadataFoundationPath)
的{{1}}或解析为c:\Program Files (x86)\Windows Kits\10\References\windows.foundation.foundationcontract\1.0.0.0
的{{1}}放回,则会返回错误:
$(WindowsSDK_MetadataPath)
如果我将c:\Program Files (x86)\Windows Kits\10\References
解析为MDMERGE : error MDM2002: The type "Windows.Media.IMediaExtension" defined in file <...>\MyEffect.winmd was referenced by type MyEffect.MyEffect but could not be found.
,则会返回错误:
$(TargetPlatformSdkMetadataLocation)
有没有人想出如何为UWP编译自定义Windows Media效果?
答案 0 :(得分:1)
将-metadata_dir
设置为“C:\ Program Files(x86)\ Windows Kits \ 10 \ UnionMetadata”为我工作。