如何添加实现 C++ 接口的标签?
Posted
技术标签:
【中文标题】如何添加实现 C++ 接口的标签?【英文标题】:How to add a label that implements a c++ interface? 【发布时间】:2012-10-29 14:34:56 【问题描述】:我的 C# 经验非常有限,所以也许这是一个常见的错误,但是,我在任何其他主题中都找不到答案。
在我的 WPF 应用程序中,我尝试创建一个标签,该标签继承自默认 WPF 标签并实现在 dll(托管 c++)中定义的接口。我的目标是将这个对象的一个实例传递给 c++ 代码,并让它在不使用单独线程的情况下更新 UI。
using System;
using System.Windows.Controls;
using System.Windows;
namespace WPFTest
//my class : default WPF Label, C++ interface (dll)
class ObservationResultLabel : Label, IObservationResult
Boolean od;
public Boolean ObjectIsDetected()
return od;
public void setObservationResult(Boolean od)
this.od = od;
this.Dispatcher.Invoke((Action)(() =>
this.InvalidateVisual();
));
protected override void OnRender(
System.Windows.Media.DrawingContext drawingContext)
if (od)
Visibility = Visibility.Visible;
else
Visibility = Visibility.Hidden;
base.OnRender(drawingContext);
但是在尝试构建时,我得到一个“'ObservationResultLabel' 类型的值不能添加到'UIElementCollection' 类型的集合或字典中。”错误。如果我使用 C# 接口尝试相同的操作,则不会出错。
有人有什么建议吗?
【问题讨论】:
【参考方案1】:开发 WPF GUI 的最简单方法是使用 Model-View-ViewModel pattern。将 WPF 元素传递到托管 C++ 库中只是为了更新它们的属性是我不建议这样做的。也不建议覆盖 OnRender()。我建议你看看一些 WPF 入门教程,例如this one。如果您打算使用 WPF 进行开发,则需要熟悉“WPF 思维方式”和 WPF 框架。
【讨论】:
【参考方案2】:我认为可能是 C++ 托管接口正在使用 c# 或 WPF 无法使用的托管 C++ 语言功能,如果可以,请尝试将 [CLSCompliant] 属性添加到您的 c++ 接口,然后尝试编译并查看编译器说什么。我也会考虑@HighCore 所说的话。
【讨论】:
以上是关于如何添加实现 C++ 接口的标签?的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中创建 Windows 共享库时如何实现接口隔离
实现 COM 接口 C++ / VC++ 6.0 / MFC