2010-02-02 2 views
2

레거시 C++ 비 관리 gtk GUI 응용 프로그램에서 WPF 윈도우를 사용하려고합니다. WPF 창 (xaml 파일 포함)을 패키지화하고 C++ GUI 응용 프로그램에서 일반 com 객체로 사용할 수 있습니까? 이 접근 방식에 대한 문제 나 문제점을 미리 예상합니까?COM 객체로 WPF 윈도우를 패키징 할 수 있습니까?

가능한 경우 링크 나 자습서 또는 방법에 대한 제안은 매우 유용 할 것입니다. 감사합니다. .

+0

에 관하여 . 로컬 서버는 괜찮습니다. http://stackoverflow.com/questions/1617343/wpf-resources-addin – adrianm

답변

8

저는 이것을하기 위해 온라인 튜토리얼을 모릅니다. 그러나 큰 문제는 아니어야합니다. 나는 이런 식으로 구현을 시도했다. 그리고 나에게 잘 돌아갔다. 아래 단계는 내가 수행 한 단계이다.

1. 솔루션에 "wpf user control"또는 "wpf custom control"라이브러리를 추가한다.

2. 새 프로젝트에 새 WPF 창 클래스 (추가 -> 창 -> ...)를 추가하십시오. 그 다음은

라이브러리 프로젝트에 새로운 클래스와 인터페이스를 3.add 나중에 작동하는 경우 어느 새 창처럼을 제어 WPF 단지 확인하기 위해 무엇을 추가하고 아래의 예처럼 정의 :

[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 interop 키를 등록하고 어셈블리에 강력한 이름을 지정하십시오 (서명 탭 참조). SN 유틸리티를 사용하여 키를 생성

5.Once은 위의 모든 디버그 \ 릴리즈 폴더에

6.In 당신의 C++ 애플리케이션을 생성 your_wpf_lib.tlb 파일 (난 당신이 그것을 위해 소스가 추측을해야 할 것 다하고 이것은 당신의 win32 프로젝트 디버그 출력 F 적절한 TLH 파일을 생성한다

:

수입 "\ full_path_to_your_tlb \ your_wpf_lib.tlb C :") 다시 컴파일, 다음 줄을 추가 나이 들었어.

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

이 당신의 WPF 양식을 표시해야합니다 :

7.now 당신 ++ 코드 C에서 양식을 호출 할 수 있습니다.


또한 나는 아래 링크 당신을 위해 유용 할 수 있습니다 생각이 도움이

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

WPF and Win32 Interoperation Overview

희망, 나는의 프로세스로 작동하는 데있어 결코

관련 문제