수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620512
  • Today | 374
  • Yesterday | 670

1 Articles, Search for 'Automation'

  1. 2007/01/05 MFC AUTOMATION 자동화
Programming/MFC2007/01/05 10:09

MFC AUTOMATION 자동화

고수닷넷 - bro님

오전 5:37 99-12-18 조경민 ( bro@shinbiro.com)

AUTOMATION 자동화


[AUTOMATION 자동화]


AUTOMATION 자동화

========================================================

' 자동화 예 : Excel. 비베에서 엑셀 객체 애플리케이션을

쓰면 서버 애플리케이션인 엑셀이 뜨게 된다. '


자동화는 OLE에서 쓰이는 말로 어떤 애플리케이션이 제공하는

서버 객체를 다른 클라이언트에 붙일수 있다는 것으로,

풀어서 본다면 OOP의 재사용성 및 캡슐화를 의미하는것이다.

즉, 서버 애플리케이션이( OLE 서버) 쓰이는 클라이언트에서

자동화되어 처리된다는 것이다.


Automation Client - 서버에 속한 노출된 인터페이스를 생성

해 낼수 있는( 그것을 사용할수 있는) 애플리케이션을 의미한다.

다른 말로는 Automation Controller라고 한다.


Automation Server - 다른 애플리케이션이 쓸수 있게 객체를

노출시킨 애플리케이션으로 Automation Component라고 한다.


애플리케이션 서버는 객체들을 노출시킨다. 이 객체들은 메소드와

프라퍼티를 외부 인터페이스에 의해 갖는다.


파라미터를 넘겨주는 방식

자동화에선 VARIANT로 파라미터를 넘겨주게 된다.


자동화 서버 객체를 사용하는 클라이언트는 두가지 방법이 있을수 있다.


- 동적으로 클라이언트가 서버의 객체를 사용한다.

- static하게 컴파일타임시 서버의 객체를 얻어와 사용한다.


클라이언트는 서버의 메소드나 프라퍼티를 얻어오기 위해서

OLE 시스템의 IDispatch 메커니즘으로 Query함으로써 얻어낼수

있다.

그러나 만일 static하게 서버객체를 사용하게 된다면 IDispatch

를 쓰지 않고 MFC에서 제공하는 COleDispatchDriver라는 것을

사용하면 됀다. ( 클래스 위자드로 부터 제공 받게 된다. )

이 static bound client는 프락시 클래스를 사용하게 되는데

이 클래스가 안전한 타입체킹된 서버의 메소드나 프로퍼티를

제공해 준다.


클라이언트가 자동화서버 객체를 갖고 프로젝팅 하기

AppWizard에서 MFC Dialog에서 두번째 스탭에 Automation 선택


그러면 기존 App,Dlg 이외에 IMy(나의 인터페이스),CMyProxy(내

프락시 클래스)가 생기는데 IMy는 서배 객체에 대한 인터페이스

이며, 프락시 클래스의 객체가 이미 Dlg안에 m_pMyProxy로 저장

되어 있는데 나는 단지 m_pMyProxy->Method()를 쓰면 된다.



AUTOMATION 서버 만들기 기초 처음 무작정 따라하기

서버 프로그램도 독자적인 애플리케이션 프로그램이고 프로젝트안에 자동화객체를 만들어 이를 밖으로 내어주게 된다.

===========================================================


New/ MFC Dialog Base로 하나 만든다 이때 두번째 스탭을

Automation을 추가한다. 프로젝트명은 Test로 설정한다.

( 이를 함으로써 App::InitInstance()에서 OleInit()일 일어난다.

또한 COleTemplateServer::RegisterAll()등 자동화 서버의

초기화등을 한다 )


이렇게 하면 일딴 CTestDlgProxy클래스와 ITest가 생기게 된다.


Automation Class 추가하기

--------------------------

클래스 위자드에서 New Class후 베이스 클래스를 My로 정한다.

그리고 아래에 Type ID로 선택하고 OK를 누룬다.


그러면 disinterface IMy (Test.odl 안에서 )와 이를 구현하는

My.cpp와 My.h가 생성된다. ( 이때 My클래스가 프락시 클래스이다. )


Property와 Method 인터페이스에 추가하기

---------------------------------------

클래스 위자드에서 Automation탭에서 하면 된다.

( 또는 클래스 뷰에서 IMy에서 오른 클릭후 Add Method나 Add Propery

하면 된다. )


Automation Interface 사용하기

------------------------------

Dlg.h에다가 사용하려는 자동화 프락시 클래스의 포인터 맴버자료를

하나 만든다. ( My* m_pAutoProxy2;);

그리고 버튼 클릭시 m_pAutoProxy2->Mothod(); 하면 알아서 인터페이

스를 얻어와서 호출하게 된다. ( IDispatch::Invoke()가 된다.)


컴파일하면 tlb가 나오게 된다.

-----------------------------

tlb 가 나오게 되면 이를 VB나 VC에서 다시 쓸수 있다.



방금전의 서버 객체로 실제 클라이언트에서 사용하기

================================================

클라이언트 프로젝트를 하나 연다 역시 다이얼로그 베이스..

그리고 클래스 위자드에서 New Class를 From TypeLib로 한후

아까 만든 tlb를 선택하게되면 Test.h test.cpp가 포함되게

되는데 이 안에는 쓰려는 ITest와 IMy가 들어 있다.

( 이때 이들은 COleDispatchDriver를 상속 받게 되는데

모두 클래스 위자드가 알아서 해주는것임으로 몰라도 된다.

이것을 static bind라고 한다. 컴파일 타임시 어떤 객체를

쓸것인지 프로젝트안에 명시되어 있게 되므로)


dlg.h의 맴버 자료로 IMy m_Auto;를 하나 만들고

dlg의 WM_CREATE부분에서



if (!m_Auto.CreateDispatch(_T("Test.Application")))

{

   AfxMessageBox("Cant Dispatch");

   return -1;  // fail

}

 

를 해준다.


디스패치를 생성할때의 인자는 문자열인데 이는 생성하려는

서버 객체 애플리케이션의 ProgID이다.

( 이는 Test 아까 프로젝트내에서 Test.reg안에서 찾다보면

ProgID = "Test.Application"이라고 써있을 것이다.

클라이언트에서 서버 애플리케이션이 내어놓은 자동화 객체를 생성하게

되면 서버 애플리케이션이 실행되므로, 서버 애플리케이션의 메인 다이얼로그를 볼 수 있게 된다. )


그리고 이제는 마음대로 디스패치를 이용해서 IMy 인터페이스

안의 메소드와 프라퍼티를 쓸수 있다.

m_Auto.Method(); 가능하게 된다.


m_Auto.Method() 호출하면...


InvokeHelper() => COleDispatchDriver::Dispatch() =>

COleDispatchDriver::DispatchV() =>

COleDispatchDriver::lpDispatch->Invoke() =>

DispatchImp::Invoke() => CCmdTaget::CallMemberFunction() =>

_afxMemberFunctionCall() // 어셈 코드로 되어 있다.

  ........ ; vtable 찾아가기 맴버 함수 찾아내서

  call esx ; 이때 Method1이 호출된다.



정리

MFC에서 Automation 서버를 작성하는 방법에 대해서 간단히 알아보았고 이를 사용하는 클라이언트 작성하는 방법 및 호출시 일어나는 일에 대해서 알아보았습니다.

"MFC" 카테고리의 다른 글
  • ToolBar에서 256이상의 Color사용 (0)2007/02/21
  • MDI/SDI 구조의 클래스간 포인터 획득 방법 (0)2007/01/29
  • MFC AUTOMATION 자동화 (0)2007/01/05
  • 프로그램 중복 실행 방지 (0)2007/01/03
  • 자석 윈도우 만들기 (0)2007/01/02
2007/01/05 10:09 2007/01/05 10:09
Posted by webdizen
Tags Automation
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2556

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 대한민국
  • IIS7
  • TRACE
  • Thread Pooling
  • 열망
  • Excel
  • SARG
  • BDM
  • Event
  • LESS JOIN
  • Desktop
  • 리눅스 하드닝
  • 한/영 전환
  • 나래관
  • Stack
  • LG
  • 엠파스
  • 크기
  • 잠금
  • Ultimate OSX

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 10:36
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.