** Automation(자동화)
- IDispatch 인터페이스를 이용하여 pointer를 지원하지 않는 언어에서도 Component를 사용할 수 있게 한 기능.
- Dispatch ID를 이용하여 Method 호출
---------------------------------------------------------------------------------------
** Project : MFCCalcServer(MFC AppWizard(dll))
step 1. Regular DLL using shared MFC DLL, Automation 체크박스 체크
- class 추가 (class wizard 이용)
: add class -> new
class name : CCalc
base class : CCmdTarget
Automation : Create byte type ID = MFCCalcServer.Calc
CCmdTarget : 4대클래스의 최상위클래스. 서버측에서 상속받아 사용.
ICalc : 선언( *.odl)
CCalc : 구현
--> interface 선언, 기술 파일.
- *.odl : MFC (object description language)
-*.idl : ATL (interface description language)
ICalc 에 Method 추가.
Add , Add, long, parameter( a long, b long)
Sub, Mul, Div 도 추가해줌.
CCalc :: Add(,...)
{
return a+b;
}
각각 구현.
*** 만약 parameter를 빼먹거나 했다면???
ICalc -> method 수정.
Calc.h -> 헤더파일 수정
Calc.cpp -> 함수 수정, DISPATCH_MAP 수정.
build -> rebuild all
tools -> registerControl
~ /mfccalcserver/*.odl
/ debug/ *.tlb
/ *.dll
--------------------------------------------------------------------------------------
**Project : MFCCalcClient (MFC AppWizard(exe))
step 1 dialog based
dialog make
숫자입력 2개, 버튼 + - * / 네개 결과출력 텍스트박스.
- class 추가.(class wizard 이용.)
- add class -> from a type library -> ~~/MFCCalcServer.tlb 선택( 서버측 디버그 폴더내)
- class name : ICalc, base class : COleDispatchDriver
- 변수 추가(~Dlg -> add member variable)
ICalc m_Calc
- Dlg::OnInitDialog 추가.
if(!m_Calc.CreateDispatch("MFCCalcServer.Calc"))
MessageBox("COM객체 생성 실패!");
else
MessageBox("COM객체 생성 성공!!");
====> 객체 생성 실패됨.
-> 해결.
BOOL CMFCCalcClientApp::InitInstance()
{
AfxOleInit();
'Computer Science' 카테고리의 다른 글
WTL code (0) | 2009.04.25 |
---|---|
COM Architecture : Threading models (0) | 2009.04.24 |
마샬링(Marshaling)이란? (0) | 2009.04.24 |
박성규씨의 ATL강좌 (0) | 2009.04.24 |
ATL/COM 강좌 (0) | 2009.04.24 |