2010-02-02 69 views
2

我想從傳統C++非託管gtk gui應用程序中使用WPF窗口。是否有可能打包WPF窗口(包括xaml文件)並將其作爲常規com對象在C++ gui應用程序中使用。你有沒有預見到這種方法的任何問題或問題?是否有可能將WPF窗口打包爲COM對象

如果可能的話,任何鏈接或教程或任何建議如何做到這一點將是非常有益的。 謝謝。

+0

我從來沒有得到它的過程中的工作。本地服務器很好 http://stackoverflow.com/questions/1617343/wpf-resources-addin – adrianm 2010-02-03 06:59:51

回答

8

我不知道任何在線教程,但它應該不是一個大問題。我已經嘗試過這樣實現,並且對我來說工作得很好,下面是我已經完成的步驟:

1.爲您的解決方案添加「wpf用戶控件」或「wpf自定義控件」庫。

2.將新的WPF窗口類(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.Once以上所有做過。你要(在調試\發佈文件夾中生成

6.In你的C++應用程序your_wpf_lib.tlb文件我想你有來源,並可以重新編譯),添加以下行:

進口 「C:\ full_path_to_your_tlb \ your_wpf_lib.tlb」

這應該會在你的Win32項目調試輸出F適當TLH文件老。

7.now你可以從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

希望這會有所幫助,至於

相關問題