U E D R , A S I H C RSS

MFC/Object Linking Embedding

1. OLE?

μ„œλ‘œ λ‹€λ₯Έ μ‘μš©ν”„λ‘œκ·Έλž¨λ“€μ΄ ν”„λ‘œκ·Έλž¨ μ•ˆμ— μžˆλŠ” λ°μ΄ν„°λΌ νŽΈμ§‘ν•  수 μžˆλ„λ‘ ν•˜λŠ” ν”„λ‘λž¨μ„ μž‘μ„±ν• μˆ˜ μžˆλ„λ‘ ν•˜λŠ” λ©”μΉ΄λ‹ˆμ¦˜μ΄λ‹€. (μ˜ˆλΌ λ“€μžλ©΄ μ˜€ν”ΌμŠ€μ›¨μ–΄μ—μ„œ ν¬ν† γ…€γ……γ…‘γ…μ—μ„œ μˆ˜μ •ν•˜λ˜ 그림을 νŠΉμ • 포맷으둜 λ³€ν™˜ν•˜μ§€ μ•Šκ³  λ°”λ‘œ 뢙이기 ν•˜λŠ” κ²½μš°μ™€ 같은 경우....)

μ΄λ ‡κ²Œ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ΄ μžμ‹ μ΄ μ§  ν”„λ‘œκ·Έλž¨μ—μ„œ 마치 μžμ‹ μ˜ ν”„λ‘œκ·Έλž¨μ˜ 데이터인 것 처럼 λ‹€λ£¨μ–΄μ§€μ§€λ§Œ, 사싀은 λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ΄ κ·Έ λ°μ΄ν„°λΌ λ‹€λ£¨λŠ” 것 일 뿐이닀.

μ™ΈλΆ€μ˜ λ°μ΄ν„°λΌ λ‹€λ£¨λŠ” 방식은 2가지이닀.
μ™ΈλΆ€ κ°μ²΄λΌ ν˜„μž¬ ν”„λ‘œκ·Έλž¨μ— λŒ€ν•œ λ„νλ¨ΌνŠΈμ˜ λΆ€λΆ„μœΌλ‘œμ„œ μ €μž₯ν•˜μ§€ μ•Šκ³ , λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ—μ„œμ˜ 레퍼런슀둜만 μ €μž₯μ‹œν‚€λŠ” 방식, λ‘λ²ˆμ§Έλ‘œλŠ” λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ˜ λ„νλ¨ΌνŠΈλΌ μžμ‹ μ˜ ν”„λ‘œκ·Έλž¨μ— μ— λ² λ”© μ‹œμΌœμ„œ 내뢀에 μ•„μ˜ˆ ν¬ν•¨ν•΄λ²„λ¦¬λŠ” 방식. μ΄λ ‡κ²Œ 2가지가 μžˆμ„ 수 μžˆλ‹€.

2. μ»¨ν…Œμ΄λ„ˆμ™€ μ„œλ²„

μ»¨ν…Œμ΄λ„ˆ : μž„λ² λ“œλœ κ°μ²΄λΌ μ²˜λ¦¬ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ„ OLE μ»¨ν…Œμ΄λ„ˆλΌκ³  λΆ€λ₯Έλ‹€.
OLEμ„œλ²„ : μ„œλ²„λŠ” μ»¨ν…Œμ΄λ„ˆμ— λ“€μ–΄κ°ˆ κ°μ²΄λΌ μƒμ„±ν•œλ‹€. ν’€μ„œλ²„λŠ” 독립적인 ν”„λ‘œκ·Έλž¨μœΌλ‘œ μž‘λ™ν•  수 μžˆκ±°λ‚˜, 볡합 λ„νλ¨ΌνŠΈ μ•ˆμ— μž„λ² λ“œλœ 객체둜 μž‘λ™ν•œλ‹€. λΈλ‹ˆμ„œλ²„λŠ” standalone λͺ¨λ“œλ‘œμ„œ μž‘λ™ν•˜μ§€ λͺ»ν•œλ‹€. μ˜€λ‘œμ§€ κ°μ²΄λΌ λ§Œλ“€κΈ°λ§Œ ν•  뿐이닀.

3. μž‘λ™ν•˜λŠ” 방식

OLE μ»¨ν…Œμ΄λ„ˆ, μ„œλ²„ μ‚¬μ΄μ˜ 톡신은 μœˆλ„μš° μš΄μ˜μ²΄μ œλΌ λ§€κ°œλ‘œ λ™μž‘ν•œλ‹€. 각 OLE λΌ μ§€μ›ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ€ κ³΅ν†΅μ˜ OLE DLL을 κ°€μ§€λŠ”λ° 이 것이 μœˆλ„μš°μ˜ 기본지원 뢀뢄이닀. DLL μ•ˆμ˜ ν•¨μˆ˜λ“€μ€ μ΄λ ‡κ²Œ κ°μ²΄μ‚¬μ΄μ˜ 톡신을 μ§€μ›ν•œλ‹€. μ΄λ•Œ μ΄λΌ μ§€μ›ν•˜λŠ” ν‘œμ€μ μΈ μΈν„°νŽ˜μ΄μŠ€κ°€ COM(Component Object Model)이닀. 본질적으둜 μ— λΉ„λ“œλœ 객체의 λͺ¨μ–‘κ³Ό μ»¨ν…Œμ΄λ„ˆκ°€ 그것과 ν†΅μ‹ ν•˜λŠ” 방법을 μ •μ˜ν•œκ²ƒμ΄λ‹€.

4. OLE COM

OLE μ„œλ²„μ™€ 같은 COMκ°μ²΄λŠ” IUnknown μ΄λΌλŠ” μΈν„°νŽ˜μ΄μŠ€λΌ κ΅¬ν˜„ν•˜κ³  μžˆλ”°.
QueryInterface() νŠΉμ •ν•œ μΈν„°νŽ˜μ΄μŠ€κ°€ 객체에 μ˜ν•΄ μ§€μ›λ˜λŠ”μ§€λΌ κ²€μ‚¬. μ§€μ›λœλ‹€λ©΄ 포인터가 λ¦¬ν„΄λœλ‹€.
AddRef() μΈν„°νŽ˜μ΄μŠ€λΌ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ κ°œμˆ˜μ— λŒ€ν•œ μΉ΄μš΄ν„°λΌ μ¦κ°€μ‹œν‚¨λ‹€.
Release() μΈν„°νŽ˜μ΄μŠ€λΌ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ κ°œμˆ˜μ— λŒ€ν•œ μΉ΄μš΄ν„°λΌ κ°μ†Œμ‹œν‚¨λ‹€. μΉ΄μš΄ν„°κ°€ 0이되면 더이상 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ€λ‘œ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλ  수 μžˆλ‹€.
이외에도 λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ“€λ„ μžˆλ‹€. μΈν„°νŽ˜μ΄μŠ€μ˜ 이름은 I둜 μ‹œμž‘ν•˜λŠ” 것이 원칙이닀. λ˜ν•œ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μžμ‹ λ§Œμ˜ μ»€μŠ€ν…€ μΈν„°νŽ˜μ΄
μŠ€λΌ λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

5. Registry

OLEμ„œλ²„λΌ μ–΄λ–€ λ°©μ‹μœΌλ‘œ 식별할 것인가? OLEκ°μ²΄λŠ” λ¬Έμ„œ, ν”„λ‘œκ·Έλž¨λ“± OLEλΌ μ§€μ›ν•˜λŠ” μ–΄λ–€ ν”„λ‘œκ·Έλž¨λ„ 될 수 μžˆλ‹€. μ‹œμŠ€ν…œμ— μžˆλŠ” 각각의 OLEκ°μ²΄λŠ” 클래슀 ID λ˜λŠ” CLSID라고 λΆ€λ₯΄λŠ” 128λΉ„νŠΈμ˜ 숫자둜 μ‹λ³„ν•œλ‹€. 이듀은 GUID라고도 뢈리우며 μ•Œκ³ λ¦¬μ¦˜μ„ ν†΅ν•΄μ„œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— λͺ¨λ‘ λ…νŠΉν•œ 값을 μ§€λ‹ˆκ²Œλœλ‹€. μ΄λŸ¬ν•œ μ •λ³΄λŠ” μœˆλ„μš° μ‹œμŠ€ν…œμ˜ λ ˆμ§€μŠ€νŠΈλ¦¬μ— μ €μž₯되게 λœλ‹€.

6. MFC의 OLE 지원 객체듀

CDocument -> COleDocument -> COleLinkingDoc -> COleServerDoc

6.1. OLE 객체 클래슀

CDocItem μ—μ„œ νŒŒμƒλ˜λŠ” 2개의 클래슀 COleClientItem, COleServerItem 은 각각 μ»¨ν…Œμ΄λ„ˆμ™€ μ„œλ²„μ˜ 관점에 ν•΄λ‹Ήν•˜λŠ” OLEκ°μ²΄λΌ λ‚˜νƒ€λ‚Έλ‹€.

6.1.1. μ»¨ν…Œμ΄λ„ˆμ— μž„λ² λ“œλœ 객체

COleClientItem μ—λŠ” μ— λ² λ“œλœ ν•­λͺ©μ˜ κ΄€λ¦¬λΌ μœ„ν•΄ μ»¨ν…Œμ΄λ„ˆκ°€ ν•„μš”λ‘œν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ“€μ΄ μ‘΄μž¬ν•œλ‹€.
OnChange() μž„λ² λ“œλœ 객체에 변경사항이 μ‘΄μž¬ν•˜λ©΄ κ·Έ ν•­λͺ©μ˜ μ„œλ²„μ— 보고될 λ•Œ ν”„λ ˆμž„μ›μ— μ˜ν•΄ ν˜ΈμΆœλœλ‹€. 일반적인 κ²½μš°λŠ” μž„λ² λ“œλœ κ°μ²΄λΌ λ‹€μ‹œ κ·Έλ¦΄λ•Œμ΄λ‹€.
OnGetItemPosition() OLE객체가 ν‘œμ‹œλ˜μ–΄μ•Ό ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ ν΄λΌμ΄μ–ΈνŠΈ μ˜μ—­μ˜ μ§μ‚¬κ°ν˜•μ„ μ–»κΈ° μœ„ν•΄ ν”„λ ˆμž„μ›μ— μ˜ν•΄ 호좜
OnChangeItemPosition() μ— λ² λ“œλœ 객체의 λ²”μœ„κ°€ νŽΈμ§‘ μž‘μ—… λ™μ•ˆ λ³€κ²½λ˜μ—ˆλ‹€λŠ” 것을 μ»¨ν…Œμ΄λ„ˆμ— μ•Œλ¦¬κΈ° μœ„ν•΄ ν”„λ ˆμž„μ›μ— μ˜ν•΄ 호좜
Serialize() μ»¨ν…Œμ΄λ„ˆ μ•ˆμ— μΆ”κ°€λœ κ°μ²΄λΌ μ§λ ¬ν™” ν•˜λŠ”λ° ν•„μš”ν•¨

6.2. μ„œλ²„μ•ˆμ— μžˆλŠ” μ— λ² λ“œλœ 객체

COleServerItem μ•ˆμ—μ„œ μ„œλ²„λΌ μ§€μ›ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ„ λ§Žμ€ ν•¨μˆ˜λΌ κ°–λŠ”λ‹€.
OnDraw() 객체가 in-place ν™œμ„±ν™” λ˜μ—ˆμ„λ•Œ μ„œλ²„μ— μžˆλŠ” 뷰클래슀의 OnDraw() ν•¨μˆ˜μ— μ˜ν•΄μ„œ 그렀진닀. λ”°λΌμ„œ μ»¨ν…Œμ΄λ„ˆμ— μž‡λŠ” μš”μ†ŒλΌ κ·Έλ¦¬λŠ” 일은 μ„œλ²„μΈ‘μ—μ„œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•˜λŠ” 것이닀.
Serialize() μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ²­μ„ λ°›κ³  κ°μ²΄λΌ μ§λ ¬ν™”ν•˜λŠ” κ²ƒμž„.
OnGetExtent() μž„λ² λ“œλœ 객체의 μ‹€μ œ λ²”μœ„λΌ μ–»κΈ° μœ„ν•΄ ν”„λ ˆμž„μ›μ— μ˜ν•΄ ν˜ΈμΆœλ˜λŠ” 뢀뢄이닀.
NotifyChanged() μ„œλ²„μ—μ„œ 객체가 λ³€κ²½λ˜λ©΄, 이 κ°μ²΄λΌ μž„λ² λ“œ ν•˜κ³  μžˆλŠ” λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆμ—κ²Œ μ΄λΌ μ•Œλ € μ»¨ν…Œμ΄λ„ˆκ°€ OnChanged()λΌ ν˜ΈμΆœν•˜λ„λ‘ ν•œλ‹€.

6.3. OLE λ„νλ¨ΌνŠΈ 클래슀

μ»¨ν…Œμ΄λ„ˆμΈ‘μ—λŠ” COleDocument, COleLinkingDoc 이 μ‘΄μž¬ν•œλ‹€. μ „μžμ˜ κ²½μš°λŠ” in-place ν™œμ„±ν™”λΌ μ§€μ›ν•˜λ©°, ν›„μžλŠ” 링크방식을 μ§€μ›ν•œλ‹€.
μ„œλ²„μΈ‘μ—λŠ” COleServerDocμ—μ„œ νŒŒμƒλœ λ„νλ¨ΌνŠΈλΌ μ΄μš©ν•œλ‹€. μ„œλ²„μΈ‘μ—μ„œλŠ” λ°˜λ“œμ‹œ OnGetEmbeddedItem() λ©€λ²„λΌ κ΅¬ν˜„ν•΄μ•Όν•œλ‹€. μ΄λŠ” 이 ν•¨μˆ˜κ°€ μˆœμˆ˜κ°€μƒ ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ΄λ‹€.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:42
Processing time 0.0519 sec