'실버라이트 com 오토메이션'에 해당되는 글 1건

  1. 2011.12.05 Sliverlight Using COM
Web/Sliverlight2011. 12. 5. 00:03
OOB 의 가장 큰 매력 중에 하나는 COM 오토메이션을 통해 COM 객체를 사용할 수 있다는 점 일텐데요.

이번 포스팅에서는 OOB의 COM 오토메이션 기능을 사용자가 만든 COM 객체와 함께 어떻게 사용하는지에 대해서
간단한 계산기 예제를 통해 알아보도록 하겠습니다.


먼저,
간단한 덧셈, 뺄셈 기능을 가지는 dll 파일을 하나 만들어 보도록 하겠습니다.
다음에 dll 등록을 위해 비주얼 스튜디오를 관리자 권한으로 실행합니다.
ComExampleCalculator란 이름의 새로운 Class Library 프로젝트를 생성하고 다음과 같이 작성하였습니다.

namespace ComExampleCalculator

{

    public delegate void CalculatorCompletedHandler(int result);

 

    [Guid("D51692ED-0A50-4AB8-8BD8-474EF3910AC3"),

    ProgId("ComExampleCalculator.Application"),

    ComSourceInterfaces(typeof(ICalculatorEvents))]

    public class Calculator

    {

        public event CalculatorCompletedHandler CalculatorCompleted;

 

        public void Add(int a, int b)

        {

            if (CalculatorCompleted != null)

            {

                CalculatorCompleted(a + b);

            }

        }

 

        public int Sub(int a, int b)

        {

            return a - b;

        }

    }

 

    /// <summary>

    /// Interface for the events raised by the com object.

    /// </summary>

    [Guid("D6D34CD5-497E-4943-8A11-F4F922C992D3"),

    InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

    public interface ICalculatorEvents

    {

        void CalculatorCompleted(int result);

    }

}


클래스 명 위에 Guid와 ProgId를 선언함을 볼 수 있습니다.
COM 고유의 식별 번호를 부여하기 위한 Guid와
COM 오토메이션 사용 시 dll 을 식별할 수 있는 ProgId 입니다.
기본적으로 위 두 가지 속성외에 ComSourceInterfaces는 이벤트 사용을 위해 추가한 속성으로
아래 ICalculatorEvents 인터페이스의 CalculatorCompleted 이벤트를 사용하고 있습니다.

Guid 는
비주얼 스튜디오 상단 메뉴 탭의 [ Tools ] -> [ Create GUID ]를 통해 생성할 수 있습니다.

 

 

 

다음으로,
dll을 COM으로 등록하기 위해 클래스 라이브러리의 속성 중 두 가지를 설정합니다.
[ Applicarion ] 탭의 Assemly Information 버튼을 눌러 Make assembly COM-Visible 에 체크합니다.


[ Build ] 탭의 Register for COM interop 에 체크합니다.


위 과정은
콘솔창을 통해 다음과 같이 등록하는 과정과 동일합니다.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm ComExampleCalculator.dll /tlb

이것으로 COM 객체를 생성하게 되었습니다.
그럼 마지막으로 OOB 프로그램에서 COM 오토메이션을 통해 사용해 보도록 하겠습니다.

OOB 프로그램을 먼저 만들어 보도록 하겠습니다.

새로운 Sliverlight Application 프로젝트를 생성하고 다음과 같이 MainPage 의 디자인을 만들었습니다.

[ MainPage.xaml ]


프로젝트의 [ Properties ] 창에서 그림과 같이 [ Enable running application out of the browser ] 에 체크를 합니다.


추가적으로 빨간 테두리 밑의 Out-of-Browser Settings 버튼을 누르게 되면 옵션을 설정할 수 있습니다.


윈도우에 관련된 타이틀, 사이즈, 시작 위치, 아이콘, GPU 가속, 설치 메뉴, 권한상승 여부를 설정할 수 있는데
COM 오토메이션을 사용하기 위해서는 권한상승이 필요함으로
Require elevated trust when running outside the browser 에 체크를 합니다.

권한상승을 하게 되면 윈도우창의 스타일을 변경할 수 있을 뿐더러
로컬 파일에 접근할 수 있고 전체화면 모드에서 키 입력이 가능해집니다.

자, 이것으로 OOB 환경에서 COM 오토메이션을 사용하기 위한 환경이 만들어졌습니다.

이 후 dynamic 을 사용하기 위한  Microsoft.CSharp과 System.Core 를 다음과 같이 작성하였습니다.

namespace SilverlightUsingCom

{

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

        }

 

        private void Button_Click(object sender, RoutedEventArgs e)

        {

            if (App.Current.HasElevatedPermissions)

            {

                try

                {

                    if (AutomationFactory.IsAvailable)

                    {

                        using (dynamic calculator =
                                         AutomationFactory.CreateObject("ComExampleCalculator.Application"))

                        {

                            AutomationEvent calculatorCompelted = 
                                                 AutomationFactory.GetEvent(calculator, "CalculatorCompleted");

                            calculatorCompelted.EventRaised += 
                               new EventHandler<AutomationEventArgs>(calculatorCompelted_EventRaised);

 

                            int num1 = int.Parse(tbNum1.Text);

                            int num2 = int.Parse(tbNum2.Text);

                            calculator.Add(num1, num2);

 

                            int subResult = calculator.Sub(num1, num2);

                            tbSub.Text = subResult.ToString();

                        }

                    }

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                }

            }

        }

 

        private void calculatorCompelted_EventRaised(object sender, AutomationEventArgs e)

        {

            int addResult = (int)e.Arguments[0];

            tbAdd.Text = addResult.ToString();

        }

    }

}


먼저 App.Current.HasElevatedPermissions 프로퍼티를 통해 권한상승 여부를 확인 후
AutomationFactory.IsAvailable 프로퍼티를 통해 COM 오토메이션을 사용할 수 있는지 확인합니다.
AutomationFactory.CreateObject 메소드를 통해 위에서 설정했던 ProgId를 입력 하여 COM 객체를 반환 받은 뒤
정의해 두었던 이벤트를 연결하고 메소드를 호출하고 있습니다.

마지막으로 실행 화면입니다.


'Web > Sliverlight' 카테고리의 다른 글

Sliverlight OOB 에서 IPAddress 얻어오기  (0) 2011.12.04
Posted by 열ㅇl