최근 S사 신용카드 VAN 연동 업무가 주어졌다. 전달된 문서는 연동 전문, 모듈, 메뉴얼 등인데, 모듈이 ActiveX로 전달 되었다. 개발된 KIOSK Application이 WPF 기반이라 일반 DllImport와는 다르게 WPF 내에서 ActiveX를 연동해야하는 Issue가 발생 하였다.
1.COM Library 등록
regsvr32를 통해 전달 받은 COM Library를 레지지스트리에 등록 한다.
2.Windows Forms를 이용한 ActvieX 파일의 Interop 어셈블리 생성
WPF에서 ActiveX를 이용하려면 Windows Forms를 이용하는것이 가장 효과적이란다. 먼저 WinForm 프로젝트를 생성해서 ActiveX Interop 파일을 생성해보자. WinForm 프로젝트 생성 후 먼저 도구상자에 신규 항목을 추가하도록 하자.
도구상자에 추가된 항목을 생성된 WinForm에 Drag And Drop하면 Form의 구성 control로 등록 된다.
*도구상자에서 해당 Control을 드래그앤드롭으로 WinForm에 등록한 상태
이상타에서 빌드과정을 거치면 아래 파일이 생성되는데, 해당 파일을 WPF Project에서 참조 추가 해야한다.
-AxInterop.XXXXXXX.dll
-Interop.XXXXXXX.dll
2.WPF Project에서 ActvieX 파일의 Interop 어셈블리 연동
생성된 두 Interop파일은 WPF Project에서 참조 추가 한다. 이렇게만 구성하면 끝인줄 알고 곧바로 object 등록해서 빌드하면 아래 오류가 발생한다.
이를 해결하기 위해 WPF에서 WindowsFormsHost를 통해 ActiveX Component를 연결해 주어야하는 절차가 남았다.
먼저 WindowsFormsHost를 위해 System.Windows.Forms, WindowsFormsIntegration를 참조추가 해야 한다.
다음으로 WPF의 Window1.xaml 재뮬 파일에 아래와 같이 WindowsFormsHost를 연결해보자.
Windows1.xaml
...
<Grid>
<WindowsFormsHost Name="componentContainer"/>
</Grid>
Windows1.xaml.cs
...
#region Members
private AxActiveXLib.AxActiveX obj = new
AxActiveXLib.AxActiveX();
#endregion //Members
public Window1()
{
InitilaizeComponent();
componentContainer.Child = obj;
}
여기 까지 실행 후 재뮬 파일의 UI를 다시 확인해 보면 WinForms와 같이 ActiveX Control이 UI 연결 되었는 확인해보자.
WPF UI에 Control이 연결 되었다. 이후 부터는 WinForm에서의 사용방식과 동일하다.
'개발언어 > .NET' 카테고리의 다른 글
WPF Code에서 Button Click 수행 (0) | 2019.11.30 |
---|---|
WPF Application StartUp Event 핸들러를 이용한 처리 (0) | 2019.11.30 |
Windows 서비스 시스템 오류 2이(가) 생겼습니다. (0) | 2019.01.21 |
data to byte로 변환하기 (0) | 2019.01.17 |
C# delegate 사용법 - 사례2 (0) | 2019.01.15 |