簡體   English   中英

托管C ++ dll中的XmlnsDefinition

[英]XmlnsDefinition in a managed C++ dll

我們有一個托管的dll,它在Cpp命名空間中實現從HwndHost派生的公共引用類。 我們構建一個名為mydll10.dll的x86版本和一個名為mydll10_x64.dll的x64版本。 我們在xaml頁面的WPF應用程序中使用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#項目中,則可以在寫入中提供解決方案

`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版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM