c# - 托管 C++ dll 中的 XmlnsDefinition

标签 c# c++ wpf xaml

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

如果 Cpp 命名空间位于 C# 项目中,则解决方案可能位于 write

`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++ 项目中执行这些程序集定义。 这可能吗? 当然我们可以打破我们的命名规则...... 谢谢

最佳答案

找到了。 将 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 版本

关于c# - 托管 C++ dll 中的 XmlnsDefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409111/

相关文章:

c# - 通过 lambda 从列表 <> 中删除重复值的最快方法

c# - 是什么导致 Xamarin xaml 中出现此异常?

c# - 循环依赖和控制反转 - 如何解决这些问题?

c# - 当窗口打开时,如何将数据模板化的文本框集中在窗口中 I​​temsControl 的第一个元素中? (C#, WPF)

c# - 无法通过 C# MVC 网站登录 Garmin

c# - .NET 4.0 中 .NET 4.5 的 Task.FromResult() 的等价物

c++ - 在 C++ 中使用访问者模式作为解释器

c++ - 在 C++ 中查找整数的长度

c++ - opencv 二进制数据 jpg 图像到 cv::Mat

c# - 来自 Binding ElementName 的值生成空字符串