Win10 Universal App中的自定义媒体效果

时间:2015-06-15 16:12:57

标签: win-universal-app windows-10 midl

我正在开发使用相机的通用Windows应用程序,我需要为相机创建自定义效果。该应用程序是用C#编写的,效果是一个C ++ DLL,它使用Media Foundation和IDL来定义自定义WinRT组件。

我已经在Windows 8.1上多次成功执行此操作,并记录了以下技巧herehere

我现在想在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效果?

1 个答案:

答案 0 :(得分:1)

-metadata_dir设置为“C:\ Program Files(x86)\ Windows Kits \ 10 \ UnionMetadata”为我工作。