托管C ++ DLL中的XmlnsDefinition

时间:2013-10-16 16:45:42

标签: c# c++ wpf xaml

我们有一个托管的dll,它实现了一个在Cpp名称空间中派生自HwndHost的公共引用类。 我们构建了一个名为mydll10.dll的x86版本和一个名为mydll10_x64.dll的x64版本。 我们在xaml页面的WPF应用程序中使用Cpp名称空间。我们可以使用'$(Platform)'条件在项目中添加适当的引用。 但我们应该在同一页面中使用 xmlns:c =“clr-namespace:Cpp; assembly = UvpProInspectWpf10”,用于x86和xmlns:c =“clr-namespace:Cpp; assembly = UvpProInspectWpf10_x64”,用于x64 exe。 在xaml中不可能使用任何类型的#if #then #else。

如果Cpp名称空间位于C#项目中,则可以在写入

中使用解决方案
`myurl:"http://schemas.me.com/wpf/"
#if x64
[assembly: XmlnsDefinition(myurl, "UvpProInspectWpf10_x64")]
#else
[assembly: XmlnsDefinition(myurl, "UvpProInspectWpf10")]
#endif

Assembly.cs文件并定义

xmlns:c=" http://schemas.me.com/wpf/” 

在xaml中。 我找不到如何在托管C ++项目中执行这些程序集定义。 这可能吗? 当然,我们可以打破我们的命名规则...... 感谢

1 个答案:

答案 0 :(得分:1)

找到它。 将System.Xaml.dll的引用添加到C ++托管项目。 使用

添加AssemblyInfo.cpp文件
using namespace System::Windows::Markup;
[assembly:XmlnsDefinition("http://schemas.me.com/wpf/", "Cpp")];

然后你可以在xaml页面中使用

xmlns:c=" http://schemas.me.com/wpf/” 

项目引用了正确的x86或x64版本