托管C++ dll 中的 XmlnsDefinition

XmlnsDefinition in a managed C++ dll

本文关键字:XmlnsDefinition 中的 dll C++ 托管      更新时间:2023-10-16

我们有一个托管dll,它在Cpp命名空间中实现了从HwndHost派生的公共引用类。我们构建了一个名为 mydll10 的 x86 版本.dll和一个名为 mydll10_x64.dll 的 x64 版本。我们在 xaml 页面的 WPF 应用程序中使用 Cpp 命名空间。我们能够使用"$(平台)"条件在项目中添加适当的引用。但是我们应该在同一页面中使用两者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

汇编.cs文件和定义

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

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

找到了。将对 System.Xaml.dll 的引用添加到C++托管项目。添加程序集信息.cpp文件

using namespace System::Windows::Markup;
[assembly:XmlnsDefinition("http://schemas.me.com/wpf/", "Cpp")];

然后,您可以在 xaml 页面中使用

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

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