Download presentation
Presentation is loading. Please wait.
1
ActiveX 개발 KnowHow (C++ Builder 6.0)
㈜ 이서비스엔지니어링
2
목차 – ActiveX ActiveX 만들기 경고창 제거하기 이벤트 변수 함수 CLSID 변경
3
1.ActiveX 만들기 ActiveX 생성 I 1) ActiveX 최초설정 2) 프로젝트옵션 설정
ActiveX 를 Wizard를 사용할때 처음 나타나는 화면입니다. 보기 배포시 첨부될 파일들을 모두 ActiveX내에 포함하기위한 설정입니다. Packages 탭의 하단에 있는 Build with Rungtime packages 의 체크를 제거합니다. * Project Manager 내용은 다른 파일의 배포 없이 사용이 가능하도록 설정하기 위함입니다.
4
1.ActiveX 만들기 ActiveX 생성 II 3) 프로젝트 옵션 II 4) Web Deployment Option
코딩을 마치고 배포에 앞서 필요한 설정입니다 최종 베포시만 “Use CAB file compression” 를 Check 함 “Auto increment release number” 는 Check 하지 않고 작업 배포시 버전을 수동으로 확정하고 배포 Linker 탭의 Linking 중 Use dynamic RTL을 제거합니다.
5
2. 경고창 제거하기 경고창 경고창 제거하기 (C++ builder 6.0) 원소스
class ATL_NO_VTABLE TTestXImpl: VCLCONTROL_IMPL(TTestXImpl, TestX, TPanel, ITestX, DIID_ITestXEvents) 수정소스 class ATL_NO_VTABLE TTestXImpl: VCLCONTROL_IMPL(TTestXImpl, TestX, TPanel, ITestX, DIID_ITestXEvents), public IPersistPropertyBagImpl<TAxEventXImpl>, …….……………………………. ① public IObjectSafetyImpl<TTestXImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA> BEGIN_COM_MAP(TTestXImpl) VCL_CONTROL_COM_INTERFACE_ENTRIES(IAxEventX) COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) ……………………………. ① END_COM_MAP() BEGIN_CATEGORY_MAP(TTestXImpl) ……………………………… ② IMPLEMENTED_CATEGORY(CATID_SafeForScripting) IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) END_CATEGORY_MAP() 설명 ① : 파라미터 사용을 위하여 필요한 항목 ② : 적당한 위치에 추가 하시면 됩니다.
6
3. 이벤트 이벤트 이벤트 만들기 Type Library 에서 Event 생성
1) IAxEventXEvents 에서 메소드추가 2) Parameters 에 인자 추가 3) Registr Type Library 실행 4) 호출이벤트 생성 Ex) Fire_OnTest(&oleStr);
7
3. 이벤트 이벤트 이벤트 정의 및 호출 1) AxEventImpl1.h 정의 이벤트 매핑 설명
class ATL_NO_VTABLE TAxEventXImpl: VCLCONTROL_IMPL(TAxEventXImpl, AxEventX, TAxEventX, IAxEventX, DIID_IAxEventXEvents), -- 중략 -- void InitializeControl() { m_VclCtl->OnActivate = ActivateEvent; m_VclCtl->OnClick = ClickEvent; m_VclCtl->OnCreate = CreateEvent; m_VclCtl->OnDblClick = DblClickEvent; m_VclCtl->OnDeactivate = DeactivateEvent; m_VclCtl->OnDestroy = DestroyEvent; m_VclCtl->OnKeyPress = KeyPressEvent; m_VclCtl->OnPaint = PaintEvent; m_VclCtl->btnTest->OnClick = Test; …………………… ① m_VclCtl->PB1->OnMouseUp = MyMouseUpEvent; …………………… ② } void __fastcall Test(TObject * Sender); …………………… ③ void __fastcall MyMouseUpEvent(TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y); …………………… ④ 설명 ActiveForm 객체가 직접 외부 이벤트를 호출할 수 없기 때문에 중간 함수를 지정하여 함수 내에서 호출 ①,② : 폼에서 이벤트에 Mapping 할 함수 지정 ③,④ : 함수 선언 * Mapping 한 이벤트와 함수는 동일한 인수를 가져야 한다.
8
3. 이벤트 이벤트 이벤트 정의 및 호출 2) AxEventImpl1.cpp 함수정의부 설명
void __fastcall TAxEventXImpl::Test(TObject * Sender) { wchar_t* oleStr = WideString(m_VclCtl->edtTest->Text); Fire_OnTest(&oleStr); } // void __fastcall TAxEventXImpl::MyMouseUpEvent(TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y) 설명 정의한 함수에서 Type Library 에서 생성한 이벤트를 호출한다. Ex) Fire_OnTest(&oleStr);
9
4. 변수 변수 변수 만들기 Type Library 에서 변수 생성 생성 1) IAxEventX 에서 Property 추가
2) Type 지정 : BSTR 3) Registr Type Library 실행 4) 생성된 함수 확인 get_Test(BSTR* Value) set_Test(BSTR Value)
10
4. 변수 변수 변수 설명 사용법 설명 1) Get 함수 외부에서 ActiveX 내의 어떤 값을 가져올수 있다 .
<script language="JavaScript" > function get() { alert(AxTest.Test); } </script> 2) Set 함수 외부에서 ActiveX 내부로 값을 전달할 수 있다. function set() AxTest.Test = “333333”; 설명 1) Get 함수 외부에서 ActiveX 내의 어떤 값을 가져올수 있다 . STDMETHODIMP TAxEventXImpl::get_Test(BSTR* Value) { try *Value = WideString(m_VclCtl->edtTest->Text).Copy(); } catch(Exception &e) return Error(e.Message.c_str(), IID_IAxEventX); return S_OK; }; 2) Set 함수 외부에서 ActiveX 내부로 값을 전달할 수 있다. STDMETHODIMP TAxEventXImpl::set_Test(BSTR Value) m_VclCtl->edtTest->Text = AnsiString(Value);
11
4. 변수 변수 PARAM 변수를 사용하기 위한 작업 Type Library 에서 변수 생성 생성
1) IAxEventX 에서 Property 추가 2) Type 지정 : BSTR 3) Registr Type Library 실행 4) 생성된 함수 확인 get_Test(BSTR* Value) set_Test(BSTR Value)
12
4. 변수 변수 파라미터 내용 설명 AxEventImpl1.cpp AxEventImpl1.h 사용법 설명
BEGIN_PROPERTY_MAP(TDIYFtpImpl) PROP_ENTRY("Param",17,CLSID_NULL) ……………… ① // PROP_PAGE(CLSID_DIYFtpPage) END_PROPERTY_MAP() AxEventImpl1.cpp STDMETHODIMP TAxEventXImpl::get_Param(BSTR* Value) { try { } catch(Exception &e) { return Error(e.Message.c_str(), IID_IAxEventX); } return S_OK; }; STDMETHODIMP TAxEventXImpl::set_Param(BSTR Value) …………… ② m_VclCtl->edtTest->Text = AnsiString(Value); } catch(Exception &e) { 사용법 <OBJECT name="AxTest" classid="clsid:AEB2CFE9-195F-4FAD-9F28-5E903D769F05" width=500 height=250 align=center hspace=0 vspace=0 > <PARAM NAME="Param" VALUE="Param Test"> </OBJECT> 설명 ① : Property 의 ID 를 확인 후 PROP_ENTRY("Param",17,CLSID_NULL) 를 수동으로 추가 한다. ② : 파라미터는 set_ 함수만 정의 한다.
13
5. 함수 함수 함수 만들기 I Type Library 에서 함수 생성 1) IAxEventX 에서 Method 추가
2) Parameters 지정 3) Registr Type Library 실행 4) 생성된 함수 확인 TestFunc(BSTR val, long* ret)
14
5. 함수 함수 함수 만들기 II Type Library 에서 함수 생성 1) IAxEventX 에서 Method 추가
2) Parameters 지정 - 리턴값인경우 . 포인터형 선언 . Parameters Flags 를 Out, RetVal 로 Check 한다. 3) Registr Type Library 실행 4) 생성된 함수 확인 TestFunc(BSTR val, long* ret)
15
5. 함수 함수 함수 설명 사용법 설명 1) 입력인자와 리턴값이 long 타입인 경우
<script language="JavaScript" > function test1() { var ret; ret = AxTest.TestFunc("함수테스트"); alert(ret); } </script> 2) 리턴타입이 BSTR 형인 경우 function test2() ret = AxTest.TestFunc2(); 설명 1) 입력인자와 리턴값이 long 타입인 경우 STDMETHODIMP TAxEventXImpl::TestFunc(BSTR val, long* ret) { try { ShowMessage(AnsiString(val)); …………………… ① *ret = 10000; } catch(Exception &e) { return Error(e.Message.c_str(), IID_IAxEventX); } return S_OK; }; 2) 리턴타입이 BSTR 형인 경우 STDMETHODIMP TAxEventXImpl::TestFunc2(BSTR* ret) *ret = WideString(m_VclCtl->edtTest->Text).Copy(); ① : 이 영역에 코드를 기술한다.
Similar presentations