+ All Categories
Home > Documents > ActiveX 개발 KnowHow (C++ Builder 6.0)

ActiveX 개발 KnowHow (C++ Builder 6.0)

Date post: 15-Jan-2016
Category:
Upload: avian
View: 147 times
Download: 1 times
Share this document with a friend
Description:
ActiveX 개발 KnowHow (C++ Builder 6.0). 2004. 4. 07. ㈜ 이서비스엔지니어링. 목차 – ActiveX. ActiveX 만들기 경고창 제거하기 이벤트 변수 함수 CLSID 변경. 1.ActiveX 만들기. ActiveX. 생성 I. 1) ActiveX 최초설정. 2) 프로젝트옵션 설정. ActiveX 를 Wizard 를 사용할때 처음 나타나는 화면입니다. 보기 배포시 첨부될 파일들을 모두 ActiveX 내에 포함하기위한 설정입니다 . - PowerPoint PPT Presentation
15
- 1 - ActiveX ActiveX 개개 개개 KnowHow KnowHow (C++ Builder 6.0) (C++ Builder 6.0) 2004. 4. 07. 개 개개개개개개개개개
Transcript
Page 1: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 1 -

ActiveX ActiveX 개발 개발 KnowHowKnowHow(C++ Builder 6.0)(C++ Builder 6.0)

ActiveX ActiveX 개발 개발 KnowHowKnowHow(C++ Builder 6.0)(C++ Builder 6.0)

2004. 4. 07.

㈜ 이서비스엔지니어링

Page 2: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 2 -

목차 – 목차 – ActiveXActiveX

1. ActiveX 만들기2. 경고창 제거하기 3. 이벤트 4. 변수5. 함수6. CLSID 변경

Page 3: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 3 -

1.ActiveX 1.ActiveX 만들기 만들기 ActiveXActiveX • 생성 생성 II

1) ActiveX 1) ActiveX 최초설정최초설정 2) 2) 프로젝트옵션 설정프로젝트옵션 설정

• ActiveX ActiveX 를 를 WizardWizard 를 사용할때 처음 나타나는 화면입니다를 사용할때 처음 나타나는 화면입니다 ..

• 보기 배포시 첨부될 파일들을 모두 보기 배포시 첨부될 파일들을 모두 ActiveXActiveX 내에 포함하기위한 설정입니다내에 포함하기위한 설정입니다 ..• Packages Packages 탭의 하단에 있는 탭의 하단에 있는 Build with Rungtime packages Build with Rungtime packages 의 체크를 제거합니다의 체크를 제거합니다 ..

* Project Manager * Project Manager 내용은 다른 파일의 배포 없이 사용이 가능하도록 설정하기 위함입니다내용은 다른 파일의 배포 없이 사용이 가능하도록 설정하기 위함입니다 ..

Page 4: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 4 -

1.ActiveX 1.ActiveX 만들기 만들기 ActiveXActiveX • 생성 생성 IIII

3) 3) 프로젝트 옵션 프로젝트 옵션 IIII 4) 4) Web Deployment OptionWeb Deployment Option

• Linker Linker 탭의 탭의 Linking Linking 중 중 Use dynamic RTLUse dynamic RTL 을 제거합니다을 제거합니다 . .

• 코딩을 마치고 배포에 앞서 필요한 설정입니다코딩을 마치고 배포에 앞서 필요한 설정입니다• 최종 베포시만 “최종 베포시만 “ Use CAB file compression” Use CAB file compression” 를 를 Check Check 함함• “ “Auto increment release number” Auto increment release number” 는 는 Check Check 하지 않고 작업하지 않고 작업 배포시 버전을 수동으로 확정하고 배포배포시 버전을 수동으로 확정하고 배포

Page 5: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 5 -

2. 2. 경고창 제거하기경고창 제거하기

경고창경고창 • 경고창 제거하기 경고창 제거하기 (C++ builder 6.0)(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()

• 설명① : 파라미터 사용을 위하여 필요한 항목

② : 적당한 위치에 추가 하시면 됩니다 .

Page 6: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 6 -

3. 3. 이벤트이벤트이벤트이벤트 • 이벤트 만들기이벤트 만들기

• Type Library Type Library 에서 에서 Event Event 생성생성

1) IAxEventXEvents 1) IAxEventXEvents 에서 메소드추가에서 메소드추가

2) Parameters 2) Parameters 에 인자 추가에 인자 추가

3) Registr Type Library 3) Registr Type Library 실행실행

4) 4) 호출이벤트 생성호출이벤트 생성

Ex) Fire_OnTest(&oleStr);Ex) Fire_OnTest(&oleStr);

Page 7: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 7 -

3. 3. 이벤트이벤트이벤트이벤트 • 이벤트 정의 및 호출이벤트 정의 및 호출

• 이벤트 매핑 이벤트 매핑

class ATL_NO_VTABLE TAxEventXImpl:class ATL_NO_VTABLE TAxEventXImpl: VCLCONTROL_IMPL(TAxEventXImpl, AxEventX, TAxEventX, IAxEventX, DIID_IAxEventXEvents),VCLCONTROL_IMPL(TAxEventXImpl, AxEventX, TAxEventX, IAxEventX, DIID_IAxEventXEvents),

-- -- 중략 중략 ---- void InitializeControl()void InitializeControl() {{ m_VclCtl->OnActivate m_VclCtl->OnActivate = ActivateEvent;= ActivateEvent; m_VclCtl->OnClick m_VclCtl->OnClick = ClickEvent;= ClickEvent; m_VclCtl->OnCreate m_VclCtl->OnCreate = CreateEvent;= CreateEvent; m_VclCtl->OnDblClick m_VclCtl->OnDblClick = DblClickEvent;= DblClickEvent; m_VclCtl->OnDeactivate m_VclCtl->OnDeactivate = DeactivateEvent;= DeactivateEvent; m_VclCtl->OnDestroy m_VclCtl->OnDestroy = DestroyEvent;= DestroyEvent; m_VclCtl->OnKeyPress m_VclCtl->OnKeyPress = KeyPressEvent;= KeyPressEvent; m_VclCtl->OnPaint m_VclCtl->OnPaint = PaintEvent;= PaintEvent;

m_VclCtl->btnTest->OnClick m_VclCtl->btnTest->OnClick = Test; …………………… = Test; …………………… ①① m_VclCtl->PB1->OnMouseUp m_VclCtl->PB1->OnMouseUp = MyMouseUpEvent; …………………… = MyMouseUpEvent; …………………… ②② }} void __fastcall Test(TObject * Sender); void __fastcall Test(TObject * Sender); …………………… …………………… ③③ void __fastcall MyMouseUpEvent(TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall MyMouseUpEvent(TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y); …………………… …………………… ④④

1) AxEvent1) AxEventImpl1Impl1.h .h 정의정의

• 설명설명 ActiveForm ActiveForm 객체가 직접 외부 이벤트를 호출할 수 없기 때문에 중간 함수를 지정하여 함수 내에서 호출객체가 직접 외부 이벤트를 호출할 수 없기 때문에 중간 함수를 지정하여 함수 내에서 호출

①①,② : ,② : 폼에서 이벤트에 폼에서 이벤트에 Mapping Mapping 할 함수 지정할 함수 지정③③,④ : ,④ : 함수 선언함수 선언

* Mapping * Mapping 한 이벤트와 함수는 동일한 인수를 가져야 한다한 이벤트와 함수는 동일한 인수를 가져야 한다 ..

Page 8: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 8 -

3. 3. 이벤트이벤트이벤트이벤트 • 이벤트 정의 및 호출이벤트 정의 및 호출

• 함수정의부 함수정의부

void __fastcall TAxEventXImpl::void __fastcall TAxEventXImpl::Test(TObject * Sender)Test(TObject * Sender){{ wchar_t* oleStr = WideString(m_VclCtl->edtTest->Text);wchar_t* oleStr = WideString(m_VclCtl->edtTest->Text); Fire_OnTest(&oleStr);Fire_OnTest(&oleStr);}}

//---------------------------------------------------------------------------//---------------------------------------------------------------------------void __fastcall TAxEventXImpl::void __fastcall TAxEventXImpl::MyMouseUpEvent(TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y)MyMouseUpEvent(TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y){{

wchar_t* oleStr = WideString(m_VclCtl->edtTest->Text);wchar_t* oleStr = WideString(m_VclCtl->edtTest->Text); Fire_OnTest(&oleStr);Fire_OnTest(&oleStr);}}

2) AxEvent2) AxEventImpl1Impl1.cpp .cpp

• 설명설명 정의한 함수에서 정의한 함수에서 Type Library Type Library 에서 생성한 이벤트를 호출한다에서 생성한 이벤트를 호출한다 ..Ex) Ex) Fire_OnTest(&oleStr);Fire_OnTest(&oleStr);

Page 9: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 9 -

4. 4. 변수변수변수변수 • 변수 만들기변수 만들기

• Type Library Type Library 에서 변수 생성 생성에서 변수 생성 생성

1) IAxEventX 1) IAxEventX 에서 에서 Property Property 추가추가

2) Type 2) Type 지정 지정 : BSTR : BSTR

3) Registr Type Library 3) Registr Type Library 실행실행

4) 4) 생성된 함수 확인생성된 함수 확인

get_Test(BSTR* Value) get_Test(BSTR* Value)

set_Test(BSTR Value)set_Test(BSTR Value)

Page 10: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 10 -

4. 4. 변수변수변수변수 • 변수 설명변수 설명

• 설명

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){ try { m_VclCtl->edtTest->Text = AnsiString(Value); } catch(Exception &e) { return Error(e.Message.c_str(), IID_IAxEventX); } return S_OK;};

• 사용법

1) Get 함수 외부에서 ActiveX 내의 어떤 값을 가져올수 있다 .<script language="JavaScript" >function get(){ alert(AxTest.Test);}</script>

2) Set 함수 외부에서 ActiveX 내부로 값을 전달할 수 있다 .

<script language="JavaScript" >function set(){ AxTest.Test = “333333”;}

</script>

Page 11: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 11 -

4. 4. 변수변수변수변수 • PARAM PARAM 변수를 사용하기 위한 작업 변수를 사용하기 위한 작업

• Type Library Type Library 에서 변수 생성 생성에서 변수 생성 생성

1) IAxEventX 1) IAxEventX 에서 에서 Property Property 추가추가

2) Type 2) Type 지정 지정 : BSTR : BSTR

3) Registr Type Library 3) Registr Type Library 실행실행

4) 4) 생성된 함수 확인생성된 함수 확인

get_Test(BSTR* Value) get_Test(BSTR* Value)

set_Test(BSTR Value)set_Test(BSTR Value)

Page 12: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 12 -

4. 4. 변수변수변수변수 • 파라미터 내용 설명파라미터 내용 설명

• AxEventAxEventImpl1Impl1.h.h

BEGIN_PROPERTY_MAP(TDIYFtpImpl) PROP_ENTRY("Param",17,CLSID_NULL) ……………… ①// PROP_PAGE(CLSID_DIYFtpPage)END_PROPERTY_MAP()

• AxEventAxEventImpl1Impl1.cpp.cpp

STDMETHODIMP TAxEventXImpl::get_Param(BSTR* Value)STDMETHODIMP TAxEventXImpl::get_Param(BSTR* Value){{ try {try {

} catch(Exception &e) {} catch(Exception &e) { return Error(e.Message.c_str(), IID_IAxEventX);return Error(e.Message.c_str(), IID_IAxEventX); }} return S_OK;return S_OK;};};

STDMETHODIMP TAxEventXImpl::set_Param(BSTR Value) STDMETHODIMP TAxEventXImpl::set_Param(BSTR Value) …………… …………… ②②{{ try {try { m_VclCtl->edtTest->Text = AnsiString(Value);m_VclCtl->edtTest->Text = AnsiString(Value); } catch(Exception &e) {} catch(Exception &e) { return Error(e.Message.c_str(), IID_IAxEventX);return Error(e.Message.c_str(), IID_IAxEventX); }} return S_OK;return S_OK;};};

• 사용법

<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_set_ 함수만 정의 한다함수만 정의 한다 ..

Page 13: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 13 -

5. 5. 함수함수함수함수 • 함수 만들기 함수 만들기 II

• Type Library Type Library 에서 함수 생성에서 함수 생성

1) 1) IAxEventX IAxEventX 에서 에서 Method Method 추가추가

2) Parameters 2) Parameters 지정지정

3) Registr Type Library 3) Registr Type Library 실행실행

4) 4) 생성된 함수 확인생성된 함수 확인

TestFunc(BSTR val, long* ret)TestFunc(BSTR val, long* ret)

Page 14: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 14 -

5. 5. 함수함수함수함수 • 함수 만들기 함수 만들기 IIII

• Type Library Type Library 에서 함수 생성에서 함수 생성

1) IAxEventX 1) IAxEventX 에서 에서 Method Method 추가추가

2) 2) Parameters Parameters 지정지정 - - 리턴값인경우 리턴값인경우 . . 포인터형 선언포인터형 선언 . Parameters Flags . Parameters Flags 를를 Out, RetVal Out, RetVal 로 로 Check Check 한다한다 ..

3) Registr Type Library 3) Registr Type Library 실행실행

4) 4) 생성된 함수 확인생성된 함수 확인

TestFunc(BSTR val, long* ret)TestFunc(BSTR val, long* ret)

Page 15: ActiveX  개발  KnowHow (C++ Builder 6.0)

- 15 -

5. 5. 함수함수함수함수 • 함수 설명함수 설명

• 설명

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){ try { *ret = WideString(m_VclCtl->edtTest->Text).Copy(); } catch(Exception &e) { return Error(e.Message.c_str(), IID_IAxEventX); } return S_OK;};

① : 이 영역에 코드를 기술한다 .

• 사용법

1) 입력인자와 리턴타입이 long 인 함수 <script language="JavaScript" >function test1(){

var ret;ret = AxTest.TestFunc(" 함수테스트 ");alert(ret);

}</script>

2) 리턴타입이 BSTR 형인 경우

<script language="JavaScript" >function test2(){

ret = AxTest.TestFunc2();alert(ret);

}</script>


Recommended