[C#, C++] C#으로 만든 UserForm ActiveX를 unmanaged C++에서 사용하기 Develop Tip

경우에 따라 위와 같이 C# 에서 사용자 정의 콘트롤을 만들고 이를 기존의 Unmanaged C++에서

호출하여 사용할 필요가 있습니다.

이와 같은 경우 다음의 예제를 따르면 쉽게 시작할 수 있습니다.


0) 테스트 환경

OS - WindowsXP Prof SP3

IDE - VisualStudio2008 SP1


1) C#의 사용자 정의 폼을 이용하여 ActiveX 만들기

다음의 코드그루블로그에서 아래의 소스를 다운받습니다.



VS2008에서 프로젝트를 열어 build 하는데 아무런 문제는 없었습니다.

(원 소스는 VS2005 버전인데 프로젝트 업그레이드를 진행한 후 이상 없습니다)


그 내용은 일반  사용자정의 컨트롤을 만들 때와 동일하며,

ActiveX 용 COM Interop을 위한 작업을 몇가지 추가해 주면 되었습니다. 


샘플 폼은 위와 같이 생겼습니다.


Release로 Build를 하고 나서는 아래와 같이 Build된 Release 폴더에서 


register.bat 를 실행하여 ActiveX를 시스템에 등록시킵니다.


2) ActiveX Test Container  (TstCon32.exe) Build

(실행 파일을 바로 못 올리는 이유는 라이센스 관련 문제가 있다더군요)

Unmanaged C++에서 (MFC, OLE) ActiveX를 일반적으로 테스트 하기 위하여 TstCon32.exe 테스트 컨테이너 프로그램이 필요합니다.

하지만 위 프로그램은 VS2005 툴 안에 포함되어 있어서, 소스에서부터 Build를 시켜야 하는데 몇가지 문제가 있었습니다.


다음은 build 하는 방법입니다.


2.1) 소스 다운로드

해당사이트에서 다운로드 합니다. (VS2008용 C++ 샘플 프로그램 소스입니다)


2.2) VS 2008에서 비어있는 (TstCon) 솔루션을 생성합니다.

(그 이유는 ~/C++/MFC/ole/TstCon/TstCon.sln 솔루션 파일을 그대로 Open해서 프로젝트 설정 변경을 하려고 하면,

  "지정하지 않은 오류입니다" 오류창이 뜨기 때문이지요)

비어있는 솔루션에 ~/C++/MFC/ole/TstCon/TCProps/TCProps.proj 프로젝트를 추가합니다.

또한 ~/C++/MFC/ole/TstCon/TstCon.proj 프로젝트를 추가합니다.


Release로 Build를 하면 다음과 같은 실행파일과 필요 Dll, 도움말 등이 생성됩니다.


(위에 것은 별도의  폴더로 이동한 결과 입니다)

이제 TstCon32.exe를 실행시킬 수 있습니다.


3) ActiveX 테스트


ActiveX에서는 다른 유사한 인터페이스와 마찬가지로 프라퍼티, 메서드, 이벤트 세가지 방법이 존재하는데 각각 살펴보겠습니다.


3.1) ActiveX 컨트롤 테스트


2에서 build한 TstCon32.exe를 실행하여,


"Edit>Inser New Control..." 메뉴항목을 선택하여,


이전 ActiveX용 C# 사용자정의 컨트롤을 선택합니다.


그러면 처음 생성한 것과 같은 모습의 컨트롤을 포함(Contain)할 수 있습니다.


3.2) 프라퍼티와 메서드 호출


컨트롤이 선택된 상태에서 메뉴의 "Control>Invoke Methods"를 선택합니다.


원 소스에서 Export 노출된 것과 같이 "TextVal" 이라는 프라퍼티의 set, get 속성을 가지고 있고,

GetTextBoxValue() 라는 메서드가 있습니다.


이제 Invoke Methods 창에서 "TextVal (PropGet)"을 선택하고 Invoke를 호출하면 Return Value에 값 (위에서는 0)을 가져옴을 알 수 있습니다.


이제는 TextVal (PropPut)을 선택하고 패러미터 값에 33을 넣은 후 "Set Value"를 지정하고, Invoke를 호출하면 실제 컨트롤에 값이 지정됨을 알 수 있습니다.


또한 GetTextBoxValue() 라는 메서드를 선택하고 Invoke 단추를 누르면 위와 같이 C#에서 만든 메시지 창이 나타남을 알 수 있습니다.


3.3) 이벤트 받음


위와 같이 C#의 이벤트에서는 OnButtonClick 이라는 이벤트가 buttonOK_Click 이벤트 핸들러에 달려있습니다.


위와 같이 컨트롤 내부에서 "OK" 단추를 눌렀을 때 하단의 이벤트가 생성되었음을 알 수 있습니다.


UserControl1.cs


덧글

댓글 입력 영역

구글애드텍스트