【问题标题】:Is it possible to package WPF window as COM Object是否可以将 WPF 窗口打包为 COM 对象
【发布时间】:2011-01-12 07:27:16
【问题描述】:

我正在尝试使用传统 c++ 非托管 gtk gui 应用程序中的 WPF 窗口。是否可以打包 WPF 窗口(包括 xaml 文件)并在 c++ gui 应用程序中将其用作常规 com 对象。您预见到这种方法有什么问题或问题吗?

如果可能,任何链接或教程或任何有关如何操作的建议都会非常有帮助。 谢谢。

【问题讨论】:

标签: c# c++ wpf com window


【解决方案1】:

我不知道有任何在线教程可以做到这一点;但这根本不是什么大问题。我已经尝试过像这样实现 smth,它对我来说效果很好,下面是我完成的步骤的顺序:

1.向您的解决方案添加“wpf 用户控件”或“wpf 自定义控件”库。

2.在新项目中添加一个新的 WPF Window 类(Add->Window->...)。然后将您喜欢的任何 wpf 控件添加到新窗口中,以检查它以后是否有效

3.向库项目中添加新的类和接口,并像下面的例子一样定义它:

[ComVisible(true)]
[Guid("694C1820-04B6-4988-928F-FD858B95C881")]
public interface ITestWPFInterface
{
    [DispId(1)]
    void TestWPF();
}

[ComVisible(true)]
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123F"),
ClassInterface(ClassInterfaceType.None)]
public class TestWPFInterface : ITestWPFInterface
{
    public void TestWPF()
    {
        Window1 form = new Window1();
        form.Show();
    }
}

4. 使您的程序集 com 可见(在项目属性的 Build 选项卡中注册 COM 互操作键)并为其分配一个强名称(请参阅签名选项卡);使用 sn 工具生成密钥

5.完成以上所有操作后,您将在 debug\release 文件夹中生成 your_wpf_lib.tlb 文件

6.在你的 c++ 应用程序中(我猜你有它的源代码并且可以重新编译),添加以下行:

进口 "C:\full_path_to_your_tlb\your_wpf_lib.tlb"

这应该会在您的 win32 项目调试输出文件夹中生成适当的 tlh 文件。

7.现在您可以从 c++ 代码中调用您的表单了:

TestWPFForms::ITestWPFInterfacePtr comInterface(__uuidof(TestWPFForms::TestWPFInterface));
comInterface->TestWPF();

这应该会显示您的 wpf 表单。


另外我相信下面的链接可能对你有用:

Calling Managed .NET C# COM Objects from Unmanaged C++ Code

WPF and Win32 Interoperation Overview

希望这会有所帮助,问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多