簡體   English   中英

是否可以將WPF窗口打包為COM對象

[英]Is it possible to package WPF window as COM Object

我正在嘗試使用舊版c ++非托管gtk gui應用程序中的WPF窗口。 是否可以打包WPF窗口(包括xaml文件)並在c ++ gui應用程序中將其用作常規com對象。 您是否預見到這種方法存在任何問題或問題?

如果可能的話,任何鏈接或教程或任何有關如何操作的建議將非常有幫助。 謝謝。

我不知道有任何在線教程這樣做; 但它根本不應該是一個大問題。 我已經嘗試過像這樣實現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互操作密鑰)並為其指定一個強名稱(請參閱簽名選項卡); 使用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表格。


另外,我相信下面的鏈接可能對您有用:

從非托管C ++代碼調用托管.NET C#COM對象

WPF和Win32互操作概述

希望這有幫助,問候

暫無
暫無

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

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