Можно ли упаковать окно WPF как COM-объект - PullRequest
4 голосов
/ 02 февраля 2010

Я пытаюсь использовать окно WPF из устаревшего неуправляемого gtk-приложения на c ++.Можно ли упаковать окно WPF (включая файл xaml) и использовать его в графическом приложении c ++ как обычный объект com.Предвидите ли вы какие-либо проблемы или проблемы с этим подходом?

Если возможно, любые ссылки или учебные пособия или любые предложения о том, как это сделать, будут очень полезны.Спасибо.

1 Ответ

10 голосов
/ 03 февраля 2010

Я не знаю ни одного учебного пособия для этого; но это не должно быть большой проблемой вообще. Я пытался реализовать что-то вроде этого, и это работало нормально для меня, ниже приведена последовательность шагов, которые я сделал:

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 свойств проекта) и присвойте ему строгое имя (см. Вкладку подписи); сгенерируйте ключ с помощью утилиты sn

5. После всего вышесказанного у вас будет файл your_wpf_lib.tlb, сгенерированный в папке debug \ release

6. В вашем приложении c ++ (я полагаю, у вас есть исходники для него и вы можете перекомпилировать), добавьте следующую строку:

импорт "C: \ full_path_to_your_tlb \ your_wpf_lib.tlb"

это должно создать соответствующий файл tlh в папке вывода отладочной информации вашего проекта win32.

7. Теперь вы можете вызвать свою форму из кода C ++:

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

это должно показать вашу форму wpf.


Также я считаю, что ссылки ниже могут быть полезны для вас:

Вызов управляемых .NET C # COM-объектов из неуправляемого кода C ++

Обзор взаимодействия WPF и Win32

надеюсь, это поможет, с уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...